Android: stopService () no llama a onDestroy ()!

Tengo grandes problemas con detener un servicio, que reproduce archivos de audio. Quiero detener el servicio actual antes de reproducir otro archivo.

Actividad:

public void playTrack(View view){ Intent i=new Intent(this,playService.class); i.setAction("com.c0dehunterstudios.relaxer.PLAY"); if(isPlaying){ stopService(i); isPlaying=false; Log.v("ACTIVITY", "Stopping.."); } startService(i); isPlaying=true; } 

Servicio:

 public void OnDestroy(){ Log.v("SERVICE","Service killed"); player.stop(); super.onDestroy(); } 

Pero lamentablemente no funciona – en realidad ni siquiera llega hasta el "servicio asesinado" dentro de OnDestroy ().

¿Qué estoy haciendo mal?

En primer lugar, es onDestroy, no OnDestroy. En segundo lugar, le falta la palabra clave override, por lo que su código de servicio debe verse algo así:

 @Override public void onDestroy(){ Log.v("SERVICE","Service killed"); player.stop(); super.onDestroy(); } 

Tuve un problema similar, incluso con onDestroy correctamente configurado – la respuesta para la que podría ser útil para las personas que vienen a esta página. Para mí, onDestroy no fue llamado inmediatamente durante stopService, a veces durante un tiempo muy largo – dejando el servicio haciendo el trabajo cuando debería haber parado.

La respuesta es que este es el comportamiento esperado – puedo adivinar, pero no sé exactamente por qué. Así que mi solución en este caso fue crear un método público estático para detener las acciones del servicio manualmente, lo que sucede en el momento en que se llama, entonces stopService () llamará onDestroy en su propio momento …

En el caso de este ejemplo (que probablemente ha desaparecido hace mucho tiempo, probablemente decidiría mantener el servicio funcionando hasta que se espera que sea bastante la aplicación, pero proporcionar formas de cambiar el archivo de audio, mientras que el servicio sigue activo.

  • Hilos de aplicación vs Hilos de servicio
  • ¿Cómo diseñar interacción servicio-actividad para un simple reproductor de mp3?
  • ¿Oiga el cambio de volumen?
  • ¿Hay alguna forma de forzar a IntentService a no ser recreado?
  • ¿Cómo comprobar si un servicio ya se está ejecutando o no en android?
  • ¿Cómo descargar el archivo con el servicio en android?
  • ¿Cómo inicio un servicio desde mi Interactor usando el patrón MVP en android?
  • ¿Cuándo y por qué se requiere PARTIAL_WAKE_LOCK?
  • Preferencia en el oyente de cambio
  • La vinculación al servicio que ya fue iniciada por BroadcastReceiver crea una nueva instancia de servicio
  • ¿Cómo obtengo el nombre de una clase de servicio en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.