No se puede destruir la actividad (el servicio no está registrado)

* EDITAR SOLUCIONADO HACIENDO ESTO: * Lo he resuelto cambiando mi onDestroy() de mi Actividad y el ServiceConnection::onServiceDisconnected() .

He añadido un booleano para comprobar si estoy limitado al servicio llamado boundToService . 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; } }; 

Y la onDestroy() :

 @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.e(getPackageName(), "Destroying Activity"); if (boundToService && mConnection != null) { doUnbindService(); } } 

Así es como se realiza la vinculación y desenlazamiento en la actividad:

 public void doBindService() { bindService(new Intent(this, EventService.class), mConnection, Context.BIND_AUTO_CREATE); boundToService = true; } public void doUnbindService() { unbindService(mConnection); boundToService = false; } 

Como dijo Guillaume, llamar a super.onDestroy() primero es una necesidad.

* FIN DE RESOLVER *

Tengo un Foreground Service MapActivity que encuesta datos de GPS, y el MapActivity solicita que los datos cada 3 segundos. Cuando se onDestroy() la onDestroy() de MapActivity , obtengo este error de LogCat:

 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` 

Y por supuesto el código alrededor de la línea 175 donde se produce la excepción en mi programa:

 @Override protected void onDestroy() { // TODO Auto-generated method stub unbindService(mConnection); super.onDestroy(); } 

Si quieres más fragmentos de código, solo dímelo.

Editar

Este es el código para ServiceConnection:

 public void doBindService() { //ComponentName service = startService(new Intent(this, // EventService.class)); bindService(new Intent(this, EventService.class), mConnection, Context.BIND_AUTO_CREATE); } 

mConnection es el tipo de 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 } }; 

Eso ha funcionado para mí! Simplemente llame a la función unbindService () de getApplicationContext () en lugar de "este" contexto. (Igual para enlazar el servicio)

 getApplicationContext().unbindService(mServiceConnection); 

Sólo podría configurar mService para null en onServiceDisconnected y comprobar que en onDestroy . Me gusta esto:

 private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder binder) { mService = ((LoadArticlesService.LoadArticlesBinder) binder).getService(); } public void onServiceDisconnected(ComponentName className) { mService = null; } }; 

OnDestroy:

 @Override protected void onDestroy() { super.onDestroy(); if (mService != null) { unbindService(mConnection); } } 

Funciona bien.

  • Excepción de tiempo de ejecución: error al entregar el resultado
  • Implementación diferente para un botón de acción flotante en cada fragmento de una actividad
  • Reanudar una actividad cuando se hace clic en una notificación
  • ¿Cómo inicio otra aplicación (descargada o preinstalada) de una actividad?
  • Deslice la actividad
  • Proper onDestroy () / Cómo evitar fugas de memoria
  • ¿Dónde colocar setContentView () en onCreate ()?
  • Cómo iniciar la actividad nativa mientras la actividad actual todavía está iniciando
  • Android - restore últimos vistos Actividad
  • Enlace de Android entre dos actividades en el mismo paquete
  • Actividad de cierre de Android mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.