2011-06-27 75 views
10

我只想知道我可以綁定另一個服務的服務。例如,目前我有一個activity A開始service B,現在我只想service B綁定並啓動另一個service C。那麼有人知道如何做到這一點?這意味着我可以使用相同的方法activity A啓動服務上的服務以啓動另一項服務?一個服務可以綁定另一個服務

回答

21

您可以從服務中調用bindService,方法與您可以從活動中調用它的方式完全相同。你會從javadoc注意到唯一你不能撥打bindService的地方是BroadcastReceiver。您也可以使用ServiceConnection以獲得Binder

+0

你能指導我一個教程,可以幫助我開始在Android的互聯網服務通信開始...問候 –

+2

這是一個好習慣嗎?如果最初的'Service'叫做'startForeground',第二個'Service'也會在後臺運行? – StuStirling

2

這適用於我。如果我從onCreate撥打bindService,那麼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

相關問題