2

バックグラウンド処理を提供するIntentServiceを備えたアプリケーションがあります。具体的には、ネットからデータをフェッチしてSqliteデータベースに保存します。私のアクティビティはContext.startService()を使用してデータを更新するようにサービスに要求し、更新が完了するとサービスはローカルブロードキャストメッセージを送信します。

IntentServiceは、スレッドプールを使用して作業を行います。主に、リクエストが完了する前に新しいアクティビティが開かれた場合、別のリソースに対する新しいリクエストは、前のリソースが終了するのを待つことをブロックしません。

それはすべて正常に機能しますが、同じリソースに対する複数の同時リクエストを防ぐために、リクエストを送信した後、サービスからDONEメッセージが返されるまで新しいリクエストの送信を停止するフラグをアクティビティに設定しました。

これで、操作の途中でIntentServiceが強制終了された場合、DONEメッセージが送信されることはなく、アクティビティは要求が満たされていないことを認識せず、リソースを再要求しません。これは可能ですか?そして、それが起こった場合、アクティビティに通知する方法はありますか?

4

2 に答える 2

3

これは可能ですか?

考えられるすべての未処理の例外をキャッチしている限り、いいえ。コンポーネントは、たとえばメモリの再利用のために個別に「強制終了」されることはありません。これは、プロセスごとに行われます。

于 2012-09-28T21:02:06.213 に答える
0

これが心配な場合は、IntentServiceのonDestroyでブロードキャストフラグを送信します(または、ブレークポイントを設定して、ヒットしているかどうかを確認します)。IntentServiceは、独自のライフサイクルを処理する単純化されたサービスとして意図されているため、サービスからスレッドプールに作業を渡す場合、IntentServiceは作業が終了したと信じている可能性があります。これはonDestroyでキャッチできます。

明らかに、コードを見ずにそれが起こっているかどうかを言うことはできませんが、このメカニズムでは、起こっているかどうかを確認できます。

于 2012-09-28T21:08:14.813 に答える