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:
- IntentService no se está llamando
- Appcelerator Android Service detiene las paradas
- Notificaciones diarias a ciertas horas
- Comunicación de Android entre dos servicios
- ¿Dónde debo usar Servicio, AsyncTask y Broadcast Receiver?
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; }
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?
- ((Botón)) dentro de un servicio no funciona
- El servicio de Android que se estaba ejecutando cuando se apagó el teléfono se inicia automáticamente cuando se inicia el teléfono
- El servicio no se inicia de nuevo después de que la aplicación kill incluso utilice START_STICKY en algún dispositivo
- Android: ¿Cómo matar por completo a un servicio que se ejecuta por separado como un proceso de fondo?
- Android: comprueba si mi servicio se está ejecutando en segundo plano
- Utilizar Otto para actualizar un listadapter de un GcmListenerService
- Propósito always null onStartCommand
- Receptor de difusión de portapapeles android
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.
- Cómo cambiar el tamaño de un ImageView mediante programación
- Expectativa del puntero nulo de UpdateAppWidget