2010-06-18 126 views
15

我在我的應用程序中有多個活動,每個活動都調用bindserviceunbindservice來獲取數據。在第一個活動bindserviceunbindservice工作正常。在第二項活動(其中重複使用相同的服務)綁定服務的方法工作正常,但unbindservice方法給出例外:IllegalArgumentException:服務未註冊:

IllegalArgumentException: Service not registered: 

請幫助。

+0

您使用什麼上下文綁定到服務? – NikkyD 2012-11-21 10:04:09

+0

請發佈logcat。 – 2013-07-07 15:45:57

+0

更好的討論:https://stackoverflow.com/questions/12277673/android-services-error-service-not-registered – dskrvk 2017-01-25 21:37:24

回答

5

多個客戶端可以一次連接到該服務。但是,只有當第一個客戶端綁定時,系統纔會調用您的服務的onBind()方法來檢索IBinder。系統然後將相同的IBinder傳遞給綁定的任何其他客戶端,而無需再次調用onBind()。 http://developer.android.com/guide/components/bound-services.html 多個組件可以立即綁定到該服務,但是當它們全部解除綁定時,服務將被銷燬。 因此,請檢查您是否在第一時間終止服務。 可能會將IBind傳遞給每個活動要好得多。因爲它只返回一個。

+1

請確保您在活動中僅爲每個服務取消綁定。偶然發生了2次解綁,並在第二次崩潰時發生了這個錯誤。刪除重複的解除綁定解決了我的問題。 – eliteslayer 2013-07-18 02:56:10

9

NikkyD的問題是非常好的,它幫助我找到了這個例外的原因。對於遇到同樣問題的任何人,請確保您的bindService調用和unbindService調用是在相同的上下文中完成的。希望能幫助到你。

+0

是的,這正是它對我來說 - 我有綁定完成的應用程序上下文,但意外地做了與活動cxt的解除綁定。 – Maks 2014-07-09 02:16:53

+0

另外我的問題是我使用活動上下文綁定和應用程序解除綁定。你不能這樣做。 – Pihhan 2014-09-30 16:09:16

0

我有一箇舊的API的這個問題。 (安卓2.2) 我得到這個錯誤,當我調用此方法:(從計費教程)

@Override 
    public void onDestroy() { 
     super.onDestroy(); 
     try { 
      if (mHelper != null) mHelper.dispose(); 
      mHelper = null; 
     }catch (IllegalArgumentException e){ 
      Log.d("TMA Billing Android 2.2","Error: "+e.getMessage()); 
      mHelper = null; 
     } 

    } 

正如你所看到的,我嘗試捕捉包圍它,現在它正在與沒有問題在Android 2.2 。