2016-04-07 5 views
1

Serviceの新しいインスタンスは、サービスが起動されるたびに作成されるか、インスタンスが再利用されるかどうかです。例えば。複数の呼び出し:Androidサービスインスタンスは再利用されますか?

context.startService(new Intent(context, MyService.class)); 

The docsは、そのサービスクラスを再利用することができますを意味するもの:

誰かがContext.startService()を呼び出した場合、システムは(それを作成し、そのonCreate()メソッドを呼び出すサービスを取得します

ただし、この問題はどこからでも直接見つけることはできません。

+1

"サービスが実行されるたびに新しいサービスインスタンスが作成されるのですか、またはインスタンスが再利用されるのですか?" - それはあなたに "実行"が何を意味するかに完全に依存します。質問を編集してより正確な用語を使用するか、実際のシナリオ(たとえば、メソッド呼び出しのシーケンスやその他のイベント)を記述することができます。 – CommonsWare

+0

良い点、ありがとう – Armand

答えて

3

サービスがstartService()で開始されると、実行中とみなされます。これまでその状態のまま:に何かサービスが処理(例えば、設定で強制停止)を終了さstopSelf()

  • を呼び出しstopService()
  • を呼び出し

    • 実行中

    、後続の呼び出しstartService()、同じサービスクラスの場合は、同じインスタンスに移動します。

    Serviceというサブクラスでは、stopSelf()を呼び出すことができます。たとえばはonHandleIntent()に電話をかけた後でそのサービスの処理が完了していない場合(つまり、その間に新鮮なコマンドを送信するためにstartService()と呼ばれている人がいない場合)、stopSelf()を呼び出します。

  • +0

    ありがとう、それは非常に便利な答えです。それ以降の 'startService()'の呼び出しは、 'onStartCommand()'に対する対応する呼び出しをトリガしますか? – Armand

    +1

    @Armand:はい。 * first * 'startService()'呼び出しは 'onCreate()'をトリガーし、 'onStartCommand()'が続きます。 2回目以降の 'startService()'呼び出しは、サービスの実行中に 'onStartCommand()'を起動するだけです。 – CommonsWare

    +0

    他の1点:サービスは基本的にシングルトンです。いつも与えられた 'Service'のインスタンスは常に1つしかありません(古いバージョンのAndroidでは少々の例外があります - これは基本的にOSのバグです。起こるべきではないからです)。 –

    関連する問題