非法参数异常: 服务未注册

15

我的应用中有多个活动,每个活动都调用bindserviceunbindservice来获取数据。在第一个活动中,bindserviceunbindservice工作正常。在第二个活动中(重复使用相同的服务),绑定服务方法可以正常工作,但是unbindservice方法会抛出异常:

IllegalArgumentException: Service not registered:

请帮忙。


你使用了哪些上下文来绑定服务? - NikkyD
请发布logcat。 - Code-Apprentice
更好的讨论:https://dev59.com/aeo6XIcBkEYKwwoYPSDf - dskrvk
4个回答

10

NikkyD的问题非常好,它帮助我找到了这个异常的原因。对于那些遇到相同问题的人,请确保您的bindService调用和unbindService调用使用的是相同的上下文。希望能对你有所帮助。


是的,对我来说就是这样 - 我已经将绑定与应用程序上下文完成,但意外地在活动上下文中执行了解除绑定。 - Maks
同时,我的问题在于我使用了Activity上下文来绑定,而使用Application来解除绑定。你不能这样做。 - Pihhan

5
多个客户端可以同时连接到服务。但是,当第一个客户端绑定时,系统会调用您的服务的onBind()方法来检索IBinder。然后,系统将相同的IBinder传递给任何附加的绑定客户端,而不再次调用onBind()。 http://developer.android.com/guide/components/bound-services.html 多个组件可以同时绑定到服务,但当它们全部解除绑定时,服务将被销毁。 因此,请检查是否在第一次时杀死了服务。 将IBind传递给每个活动可能更好,因为它只返回一个。

1
确保在Activity中每个服务只进行一次解绑。我不小心进行了两次解绑,第二次就会崩溃并出现此错误。删除重复的解绑即可解决问题。 - eliteslayer

1

为什么会出现这个错误?

有时当在一个Activity中调用unbindService()之前调用了bindService()时,就会出现这个错误。

enter image description here

一个常见的例子

是当我们在 Activity 的 onCreate() 中绑定服务,而在 onPause()onStop() 中解除绑定时。

如何避免?

情况 1:当您只想在 Activity 可见时与服务交互时,请按照以下顺序进行。

onStart() 中绑定服务,并在 onStop() 中解除绑定

情况 2:当您想要与服务交互,即使 Activity 在后台运行时也是如此。

onCreate() 中绑定服务,并在 onDestroy() 中解除绑定


0

我曾经在旧版API(Android 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;
       }

    }

正如你所看到的,我用Try Catch包围了它,现在在Android 2.2上可以毫无问题地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接