0

複数のアクティビティにわたってセッション情報を維持するための最良の方法は何ですか? アプリケーションセッション全体のアクティビティの終了/再起動間でデータを保持するための Android のベストプラクティスは何ですか? いくつかのアイデアがありますが、実際には役に立ちません。

*私のアプリケーションには、マニフェスト タグ を持つ複数のアクティビティがありsingleTopます。これらは基本的に異なるタブとして機能します。それぞれが独自のフラグメント セットとバック スタックを保持しているため、すべてを 1 つのアクティビティに入れると、ユーザーのナビゲーションが壊れてしまいます。

現在、アプリケーション サブクラスによって作成された静的シングルトンとしてセッション データを保存しています。これは、メモリを節約するためにアプリケーション全体が OS によって強制終了された場合 (上記のリンクで述べたように) を除いて、ほとんどの場合正常に機能します。アプリが殺されるという唯一の通知は(私の知る限り)

Activity.onSaveInstanceState(Bundle outState)

したがって、問題は次のとおりです。最終的には、最上位のアクティビティ (ユーザーが最終的にアプリに戻ったときに表示されるアクティビティ) だけでなく、すべてonSaveInstanceStateのアクティビティで呼び出されます。トップ以外の各アクティビティが再開されると、シングルトン セッションを復元するために使用できますが、トップ以外のアクティビティにはデータの古いコピーが含まれます (ユーザーが電話を受けるずっと前からナビゲートされている可能性があります)。Activity.onRestoreInstanceState(Bundle savedInstanceState)

1 つの解決策は、現在空の場合にのみシングルトン セッションのみにデータを復元することですが、これは、最上位のアクティビティである Activity.onRestoreInstanceState を受け取る最初のアクティビティに依存します。これは常に当てはまるとは限りません。ユーザーが電話を受けてからランチャー アイコンを介してアプリに戻った場合、電話を受けたときにユーザーが行っていたアクティビティではなく、メイン アクティビティが最初に再開され、前に進められます。

アプリケーションがOS(ユーザーではなく)によって強制終了されているというApplicationクラスの簡単な通知が本当に必要です-次に、セッションをファイルに保存し、への最初の呼び出しActivity.onRestoreInstanceStateでそれを読み返しますが、AFAIKこれ存在しません。

4

2 に答える 2

3

アプリを閉じるときに保存し、アプリの起動時に再読み込みするデータがある場合は、アプリケーションのシャットダウンと起動時にそれらを保存および取得するメカニズムを持つことができます。これを行うには、アクティビティのライフサイクルで onStop() および onStart() メソッドをオーバーライドします。

ここに画像の説明を入力

そして、これら 2 つのメソッドでデータを保存および取得する最良の方法はSharedPreferencesだと思います。

于 2012-09-12T04:34:30.637 に答える
0

セッションを保存するために Application クラスを使用することを単に主張します。Application クラスを使用すると、コンテキストがあればどこでもセッションにアクセスできるため、おそらくアプリケーション全体にアクセスできます。アプリケーションクラスは、アプリケーションが閉じられた後も値を維持するため、アプリケーションが再起動されたときに以前のセッションをクリアすることをお勧めします。

Application クラスの主な用途は、変数のグローバルな状態を維持して、更新された値でアプリケーション全体で変数を使用できるようにすることです。

于 2012-09-12T04:52:24.253 に答える