2011-02-05 14 views
2

私のアプリケーションでは、アクティビティ間で簡単に共有できるように、すべてのデータをApplicationDataに保存しています。私の理解では、このデータは最初のonCreateから最後のonDestroyまでのアプリケーションのライフサイクル全体にわたって持続する必要があります。その場合、トップアクティビティ以外のすべてのonPauseの間、永続ストレージにデータを格納する必要はありますか?ApplicationDataは、onPauseでデータを保存する場所として安全ですか?

答えて

2

このデータは、アプリケーションのライフサイクル全体にわたって、最初のonCreateから最後のonDestroyまで持続するはずです。

正確ではありません。あなたのプロセスとカスタムアプリケーションクラスは、Androidが許す限り、そのまま残っています。 Androidは緊急時にメモリを解放するためにプロセスを完全に終了することがあります。バッテリー駆動のデバイスではバッテリーが消耗しているかもしれません。

そのような場合、トップアクティビティ以外のすべてのonPauseで永続ストレージにデータを保存する必要はありますか?

データを必要としない場合のみ。 Application(または静的データメンバー)をキャッシュとしてのみ使用してください。

+0

クイック返信ありがとうございます。したがって、onPauseの間にSharedPreferencesに格納し、onResumeの間に復元することをお勧めします。私はSharedPreferencesにアクセスするのが比較的遅いと仮定しているので、SharedPreferencesをキャッシュとして扱うのではなく、ApplicationDataとの間でアクティビティ関連のデータを保存して保存する必要がありますか? – Rok

+1

@Rok: "onPauseの間にSharedPreferencesに保存し、onResumeの間に復元する方がお勧めですか?" - まあ、それは確かに一つの選択肢です。データベースは別のものです。 「SharedPreferencesへのアクセスは比較的遅いので、SharedPreferencesをキャッシュとして扱うのではなく、ActivityDataとの関連付けを保存してApplicationDataに保存する必要があります。 - 'SharedPreferences'はメモリに保存され、編集をコミットするとフラッシュされます。したがって、特にデータをコピーする必要はありません。 – CommonsWare

+0

もう一度おねがいします。私は最後の質問が1つしかありません。私はonPauseの間にデータをフラッシュに書きますが、アプリケーションが予期せずパージされた場合にこれが賢明であることがわかります。私はApplicationDataのデータ構造(単純なプリミティブよりもアクセス可能な方法で格納する必要があります)にデータ構造をコピーするので、OnResumeで読み込む理由はありますか?プロセスがパージされた場合にのみApplicationDataがパージされる場合、プロセス全体が終了しない限り存在していなければならず、プロセス全体が終了した場合、フラッシュからデータをリロードできます。 – Rok