2010-06-18 86 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 。