Android:`java.lang.IllegalArgumentException:调用onStop()时服务未注册`

Android:`java.lang.IllegalArgumentException:调用onStop()时服务未注册`,android,service,Android,Service,我有一个应用程序绑定到一个长期运行的服务。 我需要确保当用户离开活动时服务停止 因此,我实现了onStop()来关闭服务: 代码如下: @Override protected void onStop() { super.onStop(); if(mService!=null)mService.stop(); stopService(new Intent(this, LocalService.class)); unbindService(mConnection); stopSer

我有一个应用程序绑定到一个长期运行的
服务
。 我需要确保当用户离开
活动时
服务停止

因此,我实现了
onStop()
来关闭服务:

代码如下:

@Override    
protected void onStop() {
super.onStop();     
if(mService!=null)mService.stop();
stopService(new Intent(this, LocalService.class));
unbindService(mConnection);
stopService(intent);

}   
这是我的日志:

02-22 11:42:44.393: E/AndroidRuntime(1006): FATAL EXCEPTION: main
02-22 11:42:44.393: E/AndroidRuntime(1006): java.lang.RuntimeException: Unable to destroy activity {com.example.quotes/com.example.quotes.Quotes}: java.lang.IllegalArgumentException: Service not registered: com.example.quotes.Quotes$1@40cebd80
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3451)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3469)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.ActivityThread.access$1200(ActivityThread.java:141)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1287)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.os.Looper.loop(Looper.java:137)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.ActivityThread.main(ActivityThread.java:5039)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at java.lang.reflect.Method.invokeNative(Native Method)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at java.lang.reflect.Method.invoke(Method.java:511)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at dalvik.system.NativeStart.main(Native Method)
02-22 11:42:44.393: E/AndroidRuntime(1006): Caused by: java.lang.IllegalArgumentException: Service not registered: com.example.quotes.Quotes$1@40cebd80
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:921)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.ContextImpl.unbindService(ContextImpl.java:1451)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.content.ContextWrapper.unbindService(ContextWrapper.java:484)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at com.example.quotes.Quotes.onDestroy(Quotes.java:420)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.Activity.performDestroy(Activity.java:5273)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1110)
02-22 11:42:44.393: E/AndroidRuntime(1006):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3438)
02-22 11:42:44.393: E/AndroidRuntime(1006):     ... 11 more

谢谢你的帮助

关键是在
onStop()
之后,随后调用了
onDestroy()

但是我的
onDestroy()
是:

因此,我试图关闭服务两次。但服务已在
onStop()
中断开连接


无论如何,谢谢。

onStop()
不是让您停止服务,而是让系统通知服务正在停止。@User117谢谢!但是代码中的
onStop()
在活动中,当用户从活动中导航时会调用它,在该
onStop()
中,我需要停止并断开调用
stopService(新意图(这个,LocalService.class))的服务
解除绑定服务(mConnection)
如果在任何地方调用了
startService()
,则需要调用
stopService()
。若您只是绑定到服务,那个么当所有客户端都已从服务中解除绑定时,服务将自动停止;我不需要使用stopService()方法@S.D.?我发现有一件事很有用,那就是在包含
unbindService(ServiceConnection)
调用的if语句中使用对
stopService(Intent)
的调用作为布尔值
stopService(Intent)
如果服务已经停止,则返回false。是否停止两次?如果我在onStop()方法中放入->super.onStop()呢;还有解除绑定服务(myservice)?因为它仍然会抛出与您每次使用@LisaAnnei get mservice null时相同的错误
@Override    
protected void onDestroy() {
    super.onDestroy(); 
    if(mService!=null)mService.stop();
    stopService(new Intent(this, LocalService.class));
    unbindService(mConnection);
    stopService(intent);        

 }