Unable to destroy Activity (service is not registered)

android, android-activity, service

Solution

That's worked for me ! Just call the function unbindService() from getApplicationContext() instead of "this" context. (same for binding the service)

getApplicationContext().unbindService(mServiceConnection);

Problem

*EDIT SOLVED BY DOING THIS:* I have solved it by changing my `onDestroy()` of my Activity and the `ServiceConnection::onServiceDisconnected()`. I have added a boolean to check if I'm bounded to the Service called `boundToService`. The ServiceConnection: ``` private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { myService = ((EventService.MyBinder) service).getService(); } public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub Log.i(getPackageName(), "ServiceConnection::onServiceDisconnected() called"); boundToService = false; } }; ``` And the `onDestroy()`: ``` @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.e(getPackageName(), "Destroying Activity"); if (boundToService && mConnection != null) { doUnbindService(); } } ``` This is how the binding and unbinding is done in the activity: ``` public void doBindService() { bindService(new Intent(this, EventService.class), mConnection, Context.BIND_AUTO_CREATE); boundToService = true; } public void doUnbindService() { unbindService(mConnection); boundToService = false; } ``` As Guillaume said, calling `super.onDestroy()` first is a must. *END OF SOLVE* I have a `Foreground Service` that polls GPS data, and the `MapActivity` requests that data every 3 seconds. When the `onDestroy()` of the `MapActivity` is called, I get this LogCat error: ``` 06-11 21:26:35.591: D/CLIPBOARD(14801): Hide Clipboard dialog at Starting input: finished by someone else... ! 06-11 21:26:44.451: D/dalvikvm(14801): Debugger has detached; object registry had 1371 entries 06-11 21:26:44.451: D/AndroidRuntime(14801): Shutting down VM 06-11 21:26:44.456: W/dalvikvm(14801): threadid=1: thread exiting with uncaught exception (group=0x40c4b1f8) 06-11 21:26:44.476: E/AndroidRuntime(14801): FATAL EXCEPTION: main 06-11 21:26:44.476: E/AndroidRuntime(14801): java.lang.RuntimeException: Unable to destroy activity {com.project4.mtl/com.project4.mtl.EventActivity}: java.lang.IllegalArgumentException: Service not registered: com.project4.mtl.EventActivity$1@416179d8 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3124) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3142) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.access$1200(ActivityThread.java:127) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1192) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.os.Handler.dispatchMessage(Handler.java:99) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.os.Looper.loop(Looper.java:137) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.main(ActivityThread.java:4507) 06-11 21:26:44.476: E/AndroidRuntime(14801): at java.lang.reflect.Method.invokeNative(Native Method) 06-11 21:26:44.476: E/AndroidRuntime(14801): at java.lang.reflect.Method.invoke(Method.java:511) 06-11 21:26:44.476: E/AndroidRuntime(14801): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 06-11 21:26:44.476: E/AndroidRuntime(14801): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 06-11 21:26:44.476: E/AndroidRuntime(14801): at dalvik.system.NativeStart.main(Native Method) 06-11 21:26:44.476: E/AndroidRuntime(14801): Caused by: java.lang.IllegalArgumentException: Service not registered: com.project4.mtl.EventActivity$1@416179d8 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:888) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ContextImpl.unbindService(ContextImpl.java:1211) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.content.ContextWrapper.unbindService(ContextWrapper.java:375) 06-11 21:26:44.476: E/AndroidRuntime(14801): at com.project4.mtl.EventActivity.onDestroy(EventActivity.java:175) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.Activity.performDestroy(Activity.java:4629) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1082) 06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3111) 06-11 21:26:44.476: E/AndroidRuntime(14801): ... 11 more` ``` And of course the code around line 175 where the exception is caused in my program: ``` @Override protected void onDestroy() { // TODO Auto-generated method stub unbindService(mConnection); super.onDestroy(); } ``` If you want more code snippets, just tell me. *edit* This is the code for the ServiceConnection: ``` public void doBindService() { //ComponentName service = startService(new Intent(this, // EventService.class)); bindService(new Intent(this, EventService.class), mConnection, Context.BIND_AUTO_CREATE); } ``` `mConnection` is type of ServiceConnection: ``` private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { myService = ((EventService.MyBinder) service).getService(); } public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub } }; ```

Original source