<

Android アプリの状態復元

ユーザーがモバイル アプリを実行し、別のアプリを選択したとき アプリを実行すると、最初のアプリがバックグラウンドに移動され、 また背景のある。オペレーティング システム (iOS と Android の両方) バックグラウンドのアプリを強制終了してメモリを解放する可能性があります。 フォアグラウンドで実行されているアプリのパフォーマンスが向上します。

ユーザーが再度アプリを選択すると、それが表示されます フォアグラウンドに戻ると、OS が再起動します。 ただし、保存する方法を設定していない限り、 強制終了される前のアプリの状態、 状態が失われ、アプリは最初から開始されます。 ユーザーは期待していた継続性を失い、 これは明らかに理想的ではありません。 (長いフォームに記入しているときに中断されることを想像してください。 電話でクリックする送信。)

では、アプリの状態を復元するにはどうすればよいですか? に送られる前にそうなったようです バックグラウンド?

Flutter にはこれに対する解決策があります。RestorationManager(および関連クラス) の中にサービス図書館。 とともにRestorationManager、Flutter フレームワーク 状態データをエンジンに提供します国家として 変化、OS が通知したときにアプリの準備が完了するようにする アプリを強制終了し、アプリのみを提供しようとしているということ 準備する瞬間。

概要

いくつかのタスクを実行するだけで状態の復元を有効にすることができます。

  1. を定義しますrestorationIdまたはrestorationScopeIdそれをサポートするすべてのウィジェットに対して、 そのようなTextFieldScrollView。 これにより、組み込みの状態復元が自動的に有効になります。 それらのウィジェット用に。

  2. カスタムウィジェットの場合は、 どの状態を復元するかを決定する必要があります そしてその状態を保持しますRestorableProperty。 (Flutter API は、 データ型が異なります。) それらを定義しますRestorablePropertyウィジェット でStateを使用するクラスRestorationMixin。 これらのウィジェットをミックスインに登録します。restoreState方法。

  3. Navigator API (たとえば、pushpushNamed、 等々) 名前に「restoreable」が含まれる API に移行する (restorablePushresstorablePushNamed、 等々) ナビゲーション スタックを復元します。

その他の考慮事項:

  • 提供するrestorationIdMaterialAppCupertinoApp、 またWidgetsApp状態の復元を自動的に有効にする を注射するRootRestorationScope。 状態を復元する必要がある場合その上アプリクラス、 を注入するRootRestorationScope手動で。

  • の違いは、restorationIdと あるrestorationScopeId:を必要とするウィジェットrestorationScopeID新しいを作成しますrestorationScope(新しいRestorationBucket) すべての子供がその中に入る 状態を保存します。あrestorationIdウィジェットを意味します (およびその子) は周囲のバケットにデータを保存します。

ナビゲーション状態の復元

アプリを特定のルートに戻したい場合 ユーザーが最近閲覧していたもの (ショッピングカートなど)、その場合は実装する必要があります。 ナビゲーションの修復状態も同様です。

Navigator API を直接使用する場合は、 標準メソッドを復元可能に移行する メソッド (名前に「restoreable」が含まれているもの)。 たとえば、次のように置き換えます。pushrestorablePush

VeggieSeasons の例 (以下の「その他のリソース」にリストされています) を使用してナビゲーションを実装しますgo_routerパッケージ。 の設定restorationId値はlib/screensクラス。

テスト状態の復元

状態の復元をテストするには、モバイル デバイスを次のように設定します。 アプリがバックグラウンドになると状態は保存されません。 iOS と Android の両方でこれを行う方法を学ぶには、 チェックアウトテスト状態の復元でRestorationManagerページ。

その他のリソース

状態の復元の詳細については、 次のリソースを確認してください。

  • 状態復元を実装する例としては、 チェックアウト野菜の季節、書かれたサンプルアプリ Cupertino ウィジェットを使用する iOS 用。 iOS アプリには次のものが必要です少し追加のセットアップXcodeでは、しかし復元 それ以外の場合、クラスは iOS と Android の両方で同じように動作します。
    次のリストは、VeggieSeasons の関連部分へのリンクです。 例:
    • を定義するRestorableProperyインスタンスプロパティとして
    • プロパティを登録する
    • プロパティ値の更新
    • ビルドでのプロパティ値の使用
  • 短期状態と長期状態について詳しく知るには、 チェックアウト一時的な状態を区別する とアプリの状態

  • pub.dev のパッケージをチェックアウトするとよいでしょう。 状態の復元を実行します。statePersistence

  • ナビゲーションとgo_routerパッケージ、チェックアウトナビゲーションとルーティング