32

I've read a lot around Android service. As I understand, the lifecycle is:

void onCreate() 
    void onStart(Intent intent) 
    ...
void onDestroy()

http://www.linuxtopia.org/online_books/android/devguide/guide/topics/fundamentals.html

But there's is no onStop method. Questions:

  • Why isn't there a stop method?
  • What happens when a stopService request is made on my Service? (from outside, perhaps by Android itself). Can I detect this event?
  • I'd like to enforce (or at least verify) that my service is a singleton within a process. How can I do this (or does Android enforce this behind the scenes)?

For context, I have some resources I'd like to allocate and release while the service is running (in a "started"), and another set of resources I'd like to allocate and release while the service is a "created" state.

4

1 に答える 1

59

私が理解しているように、ライフサイクルは次のとおりです。

onStart()数年前から廃止されています。onStartCommand()現在のライフサイクル メソッドです。

停止方法がないのはなぜですか?

必要がないからです。

サービスで stopService リクエストが行われるとどうなりますか?

と呼ばれonDestroy()ます。

このイベントを検出できますか?

オーバーライドできますonDestroy()

サービスがプロセス内のシングルトンであることを強制 (または少なくとも検証) したいと考えています。どうすればこれを行うことができますか (または Android はこれを舞台裏で強制します)?

サービスは自然なシングルトンです。サービスのインスタンスは常に 0 または 1 です。

コンテキストとして、サービスが実行されている間 (「開始済み」) に割り当てて解放したいリソースと、サービスが「作成済み」状態である間に割り当てて解放したい別のリソースのセットがあります。 .

「作成済み」状態は、コマンド パターン (startService()およびonStartCommand()) とバインディング パターン (bindService()およびonBind()) の両方で使用されます。したがって、 を呼び出すstartService()と、サービスは純粋に「作成された」状態になり、できれば 1 ミリ秒未満になります。

于 2012-04-19T21:46:35.360 に答える