2011-11-17 15 views
6

Android 2.1以降を使用しています。私は時々OSによって殺されるサービスを持っている(私が推測するメモリ圧迫のため)。死んだAndroidサービスと静的変数

このサービスは、クラスの静的メンバーフィールドを使用する一部の州を管理します。私はサービスが殺され、OSによって再起動されても静的フィールドがそれらの値を保持することを期待しています。

しかし、このようなことは起こっていないようです。再起動後、静的変数はデフォルト値にリセットされます。 何が起こるはずですか? kill/restartにもかかわらず永続的な状態を維持する別の方法を使用する必要がありますか?

答えて

6

はい、これはサービスが強制終了されたときに起こります。プログラムはメモリから取り出され、メモリにリロードされると、静的変数のデフォルト値がすべて仮定されます。別の言い方をすれば、プログラムのバイトコードは実行ごとに変更できません。

一般に、状態を保持するために静的変数を使用するのは悪いと考えられます。それらをsqliteデータベースのような既存のストレージに保存してみてください。

+1

静的フィールドがリセットされているので、これはOSがアプリケーションJavaプロセス全体を強制終了することを意味します。はい、これは時々起こる、このポストを確認します。http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables/4642069#4642069 –

+1

Androidは本当に持続性を保つ手段を提供しませんか?それを毎回点滅させるよりも、 (たとえば、onDestroyは保証されていません!!!)私のサービスは状態が変わると状態が変わるごとにフラッシュに触れなければならない場合、バッテリーの使用量が増え、フラッシュが早くなります! – Michael

+0

@Michael [onDestroyメソッドのドキュメント](https://developer.android.com/reference/android/app/Activity.html#onDestroy()): 注:このメソッドはデータを保存する場所!たとえば、アクティビティがコンテンツプロバイダのデータを編集している場合、これらの編集はここではなく、onPause()またはonSaveInstanceState(Bundle)でコミットする必要があります。 –