2011-06-27 5 views
10

私は別のサービスからサービスをバインドできますか?例えば、現在私はactivity Aservice Bで始まっています。今はservice Bをバインドして別のservice Cを開始したいだけです。それで誰もそれをする方法を知っていますか?つまり、同じ方法を使用してactivity Aサービスを開始して別のサービスを開始することはできますか?サービスが別のサービスをバインドできますか

答えて

21

サービスからbindServiceに電話をかけることは、アクティビティから呼び出すこととまったく同じ方法で行うことができます。あなたはbindServiceと呼ぶことができない唯一の場所がBroadcastReceiverにあることにjavadocから気付くでしょう。 も同様にBinderを受け取ることができます。

+0

uは私がアンドロイドで相互サービス通信を始めることができますソートのチュートリアルに私を導くことができる...は –

+2

に関しては、これは使用しても大丈夫練習ですか?元の 'Service'が' startForeground'と呼ばれる場合、2番目の 'Service'もバックグラウンドで実行されますか? – StuStirling

2

これは私のために働く。 bindServiceからonCreateに電話をした場合、onServiceConnectedは、最初にonHandleIntentを呼び出したレースにあるため、あまりにも早く到着したら、インテントを再送信してください。私のコードは大体このようなものです。

class MyService extends IntentService implements ServiceConnection { 
    IMyOtherService iService; 

    @Override 
    void onCreate() { 
     bindService(intent); 
    } 

    @Override 
    void onServiceConnected(ComponentName name, IBinder service) { 
     iService = IMyService.Stub.asInterface(service); 
    } 

    @Override 
    void onHandleIntent(Intent intent) { 
     if (iService == null) { 
      /* onHandleIntent has lost the race with onServiceConnected 
      * so wait 250 ms and resend the Intent. 
      */ 
      try { System.getCurrentThread().sleep(250); } catch (InterruptedException e) { } 
      startService(intent); 
     } 
     iService->method1(); 
    } 
+1

サービスを代わりに使用できます。 – Ishaan

関連する問題