複数のアクティビティにわたってセッション情報を維持するための最良の方法は何ですか? アプリケーションセッション全体のアクティビティの終了/再起動間でデータを保持するための Android のベストプラクティスは何ですか? いくつかのアイデアがありますが、実際には役に立ちません。
*私のアプリケーションには、マニフェスト タグ を持つ複数のアクティビティがありsingleTop
ます。これらは基本的に異なるタブとして機能します。それぞれが独自のフラグメント セットとバック スタックを保持しているため、すべてを 1 つのアクティビティに入れると、ユーザーのナビゲーションが壊れてしまいます。
現在、アプリケーション サブクラスによって作成された静的シングルトンとしてセッション データを保存しています。これは、メモリを節約するためにアプリケーション全体が OS によって強制終了された場合 (上記のリンクで述べたように) を除いて、ほとんどの場合正常に機能します。アプリが殺されるという唯一の通知は(私の知る限り)
Activity.onSaveInstanceState(Bundle outState)
したがって、問題は次のとおりです。最終的には、最上位のアクティビティ (ユーザーが最終的にアプリに戻ったときに表示されるアクティビティ) だけでなく、すべてonSaveInstanceState
のアクティビティで呼び出されます。トップ以外の各アクティビティが再開されると、シングルトン セッションを復元するために使用できますが、トップ以外のアクティビティにはデータの古いコピーが含まれます (ユーザーが電話を受けるずっと前からナビゲートされている可能性があります)。Activity.onRestoreInstanceState(Bundle savedInstanceState)
1 つの解決策は、現在空の場合にのみシングルトン セッションのみにデータを復元することですが、これは、最上位のアクティビティである Activity.onRestoreInstanceState を受け取る最初のアクティビティに依存します。これは常に当てはまるとは限りません。ユーザーが電話を受けてからランチャー アイコンを介してアプリに戻った場合、電話を受けたときにユーザーが行っていたアクティビティではなく、メイン アクティビティが最初に再開され、前に進められます。
アプリケーションがOS(ユーザーではなく)によって強制終了されているというApplicationクラスの簡単な通知が本当に必要です-次に、セッションをファイルに保存し、への最初の呼び出しActivity.onRestoreInstanceState
でそれを読み返しますが、AFAIKこれ存在しません。