2016-08-19 11 views
0

サービスのonStartCommandはいつ正確に実行されますか?私のサービスは、私の活動でのonCreateから開始され、次のコードではサービスのonStartCommandが実行されるタイミング

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Intent intent = new Intent(this, CenseDroidService.class); 
     //onStartCommand is not extecuted immediatly after startService 
     startService(intent); 
     bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
    } 

だから、ときAndroidシステムはonStartCommandを呼ぶことにしたのでしょうか?私が知っていることは、startServiceを呼び出した後、メインスレッドで実行されることです。 onStartCommandが呼び出される前にonCreateが完全に実行されます。

答えて

0

documentationより。システムによって、クライアントが明示的にこれが何を意味するのかされ、STARTSERVICE(意図)を呼び出すことが指定された引数を提供し、起動要求

を表すトークン一意の整数でサービスを起動するたびに呼び出され

、インテントでstartService(intent)を呼び出すたびに、onStartCommandが呼び出されます。このサービスを開始してバインドする必要のある100のアクティビティがある場合は、すべてstartService()onStartCommandが呼び出されます。

今はと言われています。正確にはと呼ばれていますが、これは少し難解です。いつかはあなたのServiceConnectionが非同期で動作する理由です。おそらく次のUIスレッドサイクルの中にある可能性がありますが、それはあなたが頼りにするべきものではありません。

Serviceがいつ開始されたかについての妥当な知識が必要な場合は、LocalBroadcastManagerを使用して、登録されているすべてのリスナーにイベントをブロードキャストできます。 LocalBroadcastManager#sendBroadcastSyncは、すべてのリスナーが応答するまで実際にブロックされるため、このシナリオでは役立ちます。

関連する問題