15

私の小さなアンドロイドの知識から、アンドロイドOSが極端なメモリ条件下で私のサービスを殺す可能性があることを理解しています。

を返すサービスを作成しましたSTART_STICKY。このサービスは、バックグラウンドで実行することを目的としています。

アンドロイドが私のサービスを殺そうとしている場合、それは呼び出されonDestroyますか?

そして、再起動すると、それは呼び出されonCreateますか?

4

2 に答える 2

14

こちらの開発ガイドをご覧ください。http://developer.android.com/reference/android/app/Service.html#ProcessLifecycle

onCreate()プロセスの開始時にのみ呼び出されます。これは、サービスが初めて実行されたときか、再起動時に強制終了された場合のいずれかです。基本的に、これは開始するたびに呼び出されます。

onStartCommand()は、クライアントが を呼び出すたびに呼び出されますstartService()

サービスが破棄されたり完全に停止したりすると、Android はonDestroy()そのサービスを呼び出すことになっています。それが起こらない可能性があると思います(たとえば、Androidシステムを介さずにプロセスが強制終了されます)。バインドされたサービスの場合、これは、アクティブなクライアント バインダーがそれ以上ない場合です。

編集:onCreate()サービスが開始されます。onStartCommand()誰かがサービスを利用します。onDestroy()サービスが強制終了/停止されました。

于 2012-05-20T04:54:19.313 に答える
4

誰かが Context.startService() を呼び出すと、システムはサービスを取得し (サービスを作成し、必要に応じて onCreate() メソッドを呼び出します)、クライアントから提供された引数を使用して onStartCommand(Intent, int, int) メソッドを呼び出します。

...

サービスは、開始することも、接続をバインドすることもできます。このような場合、サービスが開始されているか、Context.BIND_AUTO_CREATE フラグを使用してサービスへの接続が 1 つ以上ある限り、システムはサービスを実行し続けます。これらの状況がいずれも成立しない場合、サービスの onDestroy() メソッドが呼び出され、サービスは事実上終了します。すべてのクリーンアップ (スレッドの停止、レシーバーの登録解除) は、onDestroy() から戻るときに完了する必要があります。

http://developer.android.com/reference/android/app/Service.html

編集:クイックアンサー。はい、両方の質問に

于 2012-05-20T04:53:53.843 に答える