Android java.lang.IllegalArgumentException:服务未注册

我有一个像这样的设置:

class MyFragment implements SomeEventListener { Application mAppContext; boolean mBound; boolean mDidCallUnbind; MyIBinder mBinder; ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBound = true; mBinder = (MyIBinder) service; mBinder.getThings();... } @Override public void onServiceDisconnected(ComponentName name) { mDidCallUnbind = false; mBound = false; mBinder = null; } }; ... @Override public void onSomeEvent() { mAppContext.bindService(...); } void unbindService() { if (mBound && !mDidCallUnbind) { mDidCallUnbind = true; mAppContext.unbindService(mConnection); } } @Override public void onPause() { unbindService(); super.onPause(); } } 

但是,我仍然不时看到标题中的错误: java.lang.IllegalArgumentException: Service not registered调用unbindService()时, java.lang.IllegalArgumentException: Service not registered被生成。 我错过了一些愚蠢的东西,还是有更多的事情呢? 我应该注意到,这个片断可能存在多于一个。

编辑

由于没有人似乎正在阅读代码,让我解释一下。 unbindService()不调用Context.unbindService(ServiceConnection),除非服务被绑定( mBound ), 并且之前没有调用onServiceDisconnected(...)callbackonServiceDisconnected(...)之前可能调用unbindService()

记住,是否有任何情况下,Android会解除您的服务,以便服务将被解除绑定,但ServiceDisconnected不会被调用,从而使我处于陈旧的状态?

此外,我正在使用我的应用程序上下文进行初始绑定。 假设如下:

 @Override public void onCreate() { mApplication = getContext().getApplicationContext(); } 

Solutions Collecting From Web of "Android java.lang.IllegalArgumentException:服务未注册"

doBindService()doUnbindService()使用mIsBound ,而不是在ServiceConnection实例中。

 ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBinder = (MyIBinder) service; } @Override public void onServiceDisconnected(ComponentName name) { mBinder = null; } }; ... public void doBindService() { bindService(new Intent(this, MyService.class), mConnection, Context.BIND_AUTO_CREATE); mIsBound = true; } public void doUnbindService() { if (mIsBound) { unbindService(mConnection); mIsBound = false; } } 

这是如何在http://developer.android.com/reference/android/app/Service.html中完成的

java.lang.IllegalArgumentException: Service not registered意味着您在调用unbindService()时没有绑定服务。

所以在你的情况下,在调用onPause() unbindService()之前, unbindService() onPause()

我和我的应用程序有完全相同的问题。 我IllegalArgumentException会得到IllegalArgumentException 。 我想这个特殊情况是由于服务onServiceDisconnected绑定而引起的, onPause onServiceDisconnected 之前被调用。 所以我会尝试Synchronized东西,以确保正确的执行。