2013-05-04 39 views
0

我買了綁定服務的一個問題: 我用下面的代碼:通過量bindService()服務的Android的實例

protected void onCreate(){ 
    ... 
    button.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       if(mService != null) 
           Log.e(TAG, "is instantiated (onClick)!"); 
      }); 
} 

protected void onStart(){ 
    super.onStart(); 
    bindService(new Intent(this, HostService.class), connection, Context.BIND_AUTO_CREATE); 
    if(mService == null) 
     Log.e(TAG, "is null (onStart)!"); 
} 
... 

開始我的活動結束後「爲空(在onStart)!」打印在LogCat中。 當我點擊按鈕「被實例化(onClick)!」被打印。 爲什麼bindService()不直接實例化我的服務實例mService,我該如何解決引用此問題的問題?

THX &問候

回答

0

爲什麼bindService()犯規實例我的服務實例MSERVICE直接

這是不應該。與Android中的許多操作一樣,bindService()是異步的。

我該如何解決這個問題呢?

把你的業務邏輯在ServiceConnectiononServiceConnected(),而不是立即bindService()調用後。

+0

好的,但我必須在onServiceConnected()做一些用戶界面的東西。所以我發送消息給在我的活動中實現的處理程序(消息的處理現在應該在Ui線程上運行),但是我得到以下異常:textview.checkforrelayout上的nullpointerexception 這有點令人困惑..? – user2224350 2013-05-04 21:55:02

+0

@ user2224350:「但我必須在onServiceConnected()中做一些ui的東西 - 」onServiceConnected()'在主應用程序線程上被調用。 「這有點令人困惑......?」 - 歡迎您在發佈代碼,堆棧跟蹤以及它們如何匹配(即代碼的哪些行從堆棧跟蹤中引用)的情況下啓動另一個StackOverflow問題。 – CommonsWare 2013-05-04 22:00:48