0

BOOT_COMPLETED でサービスを開始する Android のアプリケーションに取り組んでいます。すべて正常に動作していますが、いくつかのメッセージをログに記録しているときに、アプリケーションを強制終了した後、すぐにまたは 1 分後に再起動することに気付きました。

サービスを開始できる唯一の受信機が BOOT_COMPLETED に登録されます。だから私の質問は、電話がすでに起動した後にアプリケーションが勝手に起動するのはなぜですか。

Android サイトから:

ブロードキャスト アクション: これは、システムの起動が完了した後に 1 回ブロードキャストされます。アラームのインストールなど、アプリケーション固有の初期化を実行するために使用できます。このブロードキャストを受信するには、RECEIVE_BOOT_COMPLETED 権限を持っている必要があります。

私の理解では、このイベントは一度だけブロードキャストされるはずなので、他に何がこのイベントを引き起こしている可能性があります.

編集:これは、BootReceiver (BroadCastReceiver を拡張) でサービスを開始するために使用しているコードです。このコードは他のどこにも複製されていません。

Intent serviceIntent = new Intent(context, RandomToneService.class);
context.startService(serviceIntent);
4

1 に答える 1

1

確認するには、オーバーライドしてログに記録する必要がありますか?

必須ではありませんが、サービスとそのライフサイクルについて読む必要があります。

最近のタスク リストからアプリをスワイプして離すことは、メモリ不足のためにプロセスが終了したときに Android が行うことと同じです。は、そのような場合に自動的に再起動するServiceように Android に要求できます。これは、 からの戻り値を介して行われますonStartCommand()

onStartCommand()a のからのデフォルトの戻り値は です。これServiceSTART_STICKY、Android に、後でメモリがあるときにサービスを再起動するように指示します。からのデフォルトの戻り値はonStartCommand()、呼び出したかどうか、およびそこで指定した内容に応じて、またはのIntentServiceいずれかです。START_NOT_STICKYSTART_REDELIVER_INTENTsetIntentRedelivery()

したがって、これらの状況でサービスを自動的に再起動したくないonStartCommand()場合は、 return を取得するためSTART_NOT_STICKYに次のいずれかを行う必要があります。

  • 、またはsetIntentRedelivery(false)_IntentService

  • をオーバーライドonStartCommand()し、デフォルトの動作のためにスーパークラスにチェーンしますが、その後戻りますSTART_NOT_STICKY

于 2013-04-23T18:23:25.387 に答える