2011-08-01 140 views
5

這是我的理解,如果我想要一個服務即使沒有任何限制運行,那麼它必須首先啓動startService(意圖我)。在bindService之前等待啓動服務

我的問題是,如果我想在啓動後立即綁定到服務,下面的代碼是否可以保證服務是用startService()創建的?

服務類中

的靜態方法:

public static void actStart(Context ctx) { 
    Intent i = new Intent(ctx, BGService.class); 
    i.setAction(ACTION_START); 
    ctx.startService(i); 
} 

結合活性:

BGService.actionStart(getApplicationContext());  
bindService(new Intent(this, BGService.class), serviceConnection, Context.BIND_AUTO_CREATE); 
+0

我面臨同樣的問題。你有沒有找到決定? –

+3

bindservice實際上等待startservice完成 – Paul

回答

0

我不知道你正在嘗試做的,但「Context.BIND_AUTO_CREATE」創建服務然後綁定到該服務,即使它尚未啓動。

現在如果你想結合,你可以使用serviceConnection的onServiceConnected()方法後立即對其進行訪問:

new ServiceConnection() { 
     @Override 
     public void onServiceConnected(ComponentName className, 
       IBinder service) { 
      //put your code here... 
     } ... 
0

爲了增加Bugdayci的答案,一個完整的例子如下:

 ServiceConnection myConnection = new ServiceConnection() { 
      @Override 
      public void onServiceConnected(ComponentName className, 
        IBinder service) { 
        ... your code that needs to execute on service connection  

      } 


    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     ... your code that needs to execute on service disconnection 

    } 
     }; 

     Intent intent = new Intent(this, TheServiceClassName.class); 
     bindService(intent, myConnection, Context.BIND_AUTO_CREATE); 

...

沒有在最後的bindService的onServiceConnected()的代碼將不會執行。

相關問題