2011-02-05 6 views
4

私は、IntentServiceのプライベートデータが最初のstartServiceの2回の呼び出しでクリアされるという問題があります。最初の呼び出しが終了した後にサービスが停止し、2回目の呼び出しを処理するときに再作成されると仮定します。 IntentServiceを再作成しないように強制する方法や、このプライベートデータをstartServiceルーチンの2回の呼び出しで同じにする方法はありますか?強制的にIntentServiceを再作成しないようにする方法はありますか?

答えて

2

私は、最初の呼び出しが終了した後にサービスが停止し、2番目の呼び出しを処理するときに再作成されると仮定します。

いいえすべてIntentsが処理された場合にのみ終了します。

+1

最初のインテントが送信されたと仮定すると、IntentServiceによって処理され、IntentServiceが停止しました。それ以降は、2番目のインテントが送信されました.InententServiceのコンテキストを元のインテントから処理するにはどうすればよいですか? – miqqo

+1

@miqqo:あなたはしません。それが全体のポイントです。呼び出しの間に、 'IntentService'はRAMにありません。実際、どんな運があっても、アプリケーション全体のどれもがRAMにはありません。これを他のオペレーティングシステムの他のアプリケーションと同様に扱う必要があります。データベースなどの永続的なストアで実行する間にデータを保存します。 – CommonsWare

3

には、インスタンス間でデータを保持するようにしたい場合は、静的変数に入れることができます。典型的な例:ディスクをロードしている状態があるので、最初にインスタンス化されたときにデータをロードするグローバルシングルトンを作成し、それ以降のリクエストで同じインスタンスを使用します(データを再ロードせずに)。 onCreate()でシングルトンを取得するサービスの新しいインスタンスは、以前のサービスインスタンスが既に要求していた場合に再ロードする必要はありません。

このような設計を行う際には、プロセスのライフサイクルを理解し、いつそれを殺すことができるかを理解することが非常に重要です。そうしないと、通常の操作中にプロセスが強制終了されたときに、かなりランダムな時点でデータが失われる可能性があります。

関連する問題