2016-04-09 14 views
0

ユーザーが自分のアプリに戻ったときに、自分のアプリの状態を保存して復元したいと考えています。これまではSharedPreferencesを使用してはいけないことを読んできました。それが安全でないため、savedInstanceStateバンドルを使用する必要はありません。どのように私のアンドロイドアプリの状態を保存するには?

推奨される方法は、OnPauseのデータをデータベースまたはファイル(私の場合は十分です)に保存し、それをOnResumeで復元することです。しかし、二つの質問は、このアプローチに関して生じた:

  1. アプリは唯一MainActivity介して入力されたので、私は、私はそのOnResume方法で状態を復元推測することができます。ただし、ユーザーはどこにでも自分のアプリを残すことができます。つまり、私のアプリのすべてのアクティビティのOnPauseメソッドに自分のアプリの状態を保存する必要がありますか?

  2. アクティビティのライフサイクルを正しく理解していれば、ユーザーがアプリケーション内のアクティビティをナビゲートするときにOnPauseとOnResumeも呼び出されます。ナビゲート中は、保存と復元は必要ありません。私はユーザーが私のアプリを離れるときに状態を保存し、彼が返すものを復元したい。または、私はそれを無視して、たくさんの保存と復元を続けなければなりませんか?

+0

私はあなたがそれを無視し、SharedPreferencesで行うべきだと思います。シンプルでプロセスを速くします。 –

+1

共有設定を使用できないのはなぜですか?このようなことはうまくいきます。 –

答えて

3

これまでのところ、私はそれが最後では

好みのためだから、あなたが好きなためSharedPreferencesを使用するために歓迎され、私はそのためにSharedPreferencesを使用してはならないことを読んでいます。ユーザーの好みに合わせてに最適化されています。

もそれはそれが唯一のselect scenariosです

安全ではないですので、私は、savedInstanceStateバンドルを使用する必要があります。たとえば、ユーザーが少し気を散らした場合に、ユーザーが完了するために部分的に記入されたフォーム値を保持するためです。これは長期的なストレージソリューションではありません。

データをOnPauseにデータベースまたはファイル(私の場合は十分です)に保存し、OnResumeで復元することをお勧めします。

データの保存のためのシナリオと解決策は、データの性質とユーザーのやりとりによってさまざまです。あなたがチャット・メッセージを使ってチャット・アプリで行うことは、ユーザーがタイプしてチャット・サーバーから取得したものは、ワープロとはまったく異なります。これは、ゲーム内で行うこととは大きく異なります。など、あなたがストリーミングメディアプレーヤーで何をすべきかは非常に異なること

アプリは唯一のあなたはこれを強制することは非常に具体的な措置を講じない限り、間違っているMainActivity

を介して入力することができます。ユーザーがあなたのアプリにいて、別のアプリに移動した場合(たとえば、HOMEを押す)、アプリがバックグラウンドのときにアプリの処理が終了することがあります。ユーザーがあなたのアプリにかなり早く戻った場合(例えば、30分以内に)、概要画面/最近の仕事リストなどで、Androidはユーザーを最後の状態に戻そうとします。あなたの活動のいずれかになる可能性があります。

だから、私はそのOnResumeメソッドの状態を復元すると思います。

各アクティビティはそれぞれ独自の状態を担当します。その状態のいくつかはよく共有される(例えば、シングルトンPOJOキャッシュマネージャ)。しかし、活動は以前に州が設定されていると仮定すべきではない。

これは、私のアプリのすべてのアクティビティのOnPauseメソッドに自分のアプリケーションの状態を保存する必要があるということですか?

また、あなたのアプリで何をしているかによって大きく異なります。答えは、「ユーザーがボタンを押したときに状態を保存する」または「ユーザーがスワイプしたときに状態を保管する」または「サーバーから入ってくるMQTTメッセージから状態を取得するときに状態を保管する」などです。私は彼が

私見を返し、ユーザーが自分のアプリケーションを離れた場合にのみ、状態を保存し、それをものを復元したい

、あなたは一般的に、ときの状態変化状態を保存します。適切なキャッシングが与えられている場合、「復元」は非常に高速ですが、アプリケーションがアクティブな状態で使用されていて、大量のデータが大量にあり(またはキャッシュから値が取り出される)、プロセスが終了して再び開始された場合、

関連する問題