1

システムによって停止されたときに Android サービスがどのように動作するかについて質問があります。私の理解では、リソースが必要なためにシステム (OS) がサービスを停止した場合、システムはサービスを再開する責任があります。このシナリオでは、システムはサービスを停止するときに onDestroy() を呼び出さず、サービスを開始するときに onCreate() を呼び出さず、単に onStartCommand() を呼び出します。

onStartCommand() でスレッドを作成している場合、システムがサービスを停止したときにスレッドをクリーンアップするにはどうすればよいですか。スレッドを停止しない場合、onStartCommand() は新しいスレッドを作成します。私は、onStartCommand() パラメーター (インテント、フラグ、および startId) に帰着する可能性があると思います。リソースが必要だったため、システムがサービスを停止した後にサービスを開始すると、それらは異なる場合があります。startService() コマンドまたはシステム自体によってサービスが開始されたときのパラメーターの違いを誰か教えてください (停止後)

onCreate() でスレッドを作成できますが、システムがサービスを停止したときにスレッドがまだ存在するかどうかはわかりません。この種のシナリオを処理する最良の方法は何でしょうか。

ありがとう

4

1 に答える 1

3

私の理解では、リソースが必要なためにシステム (OS) がサービスを停止した場合、システムはサービスを再開する責任があります。

それはあなたが何から返すかによって異なりますonStartCommand()START_NOT_STICKYたとえば、OS がサービスを再度開始する必要がないことを意味します。

このシナリオでは、システムはサービスを停止するときに onDestroy() を呼び出さず、サービスを開始するときに onCreate() を呼び出さず、単に onStartCommand() を呼び出します。

呼び出すかどうかonDestroy()は、サービスがどのように停止されるか (たとえば、直接またはプロセスの終了を介して) によって少し異なります。ただし、onCreate()OS がサービスを再起動した場合は、引き続き新しいインスタンスを呼び出す必要があります。

onStartCommand() でスレッドを作成している場合、システムがサービスを停止したときにスレッドをクリーンアップするにはどうすればよいですか。

onDestroy()で、スレッドがなくなる原因となる何かが発生することを確認します。呼び出される (そしてサービスがクリーンアップを実行できる)かonDestroy()、プロセスが終了します (そして、スレッドはそれと共に終了します)。

サービスがstartService()コマンドまたはシステム自体によって開始されたとき(停止後)、パラメーターの違いを誰か教えてください。

START_FLAG_REDELIVERYに渡されるフラグには がありますが、AFAIKからonStartCommand()戻った場合にのみ設定されます。START_REDELIVER_INTENTonStartCommand()

于 2012-11-05T17:49:35.837 に答える