Forzar el cierre de una aplicación con un servicio: onDestroy () no se llama en servicio?

He implementado un servicio pegajoso y cuando la fuerza cierre la aplicación veo que onDestroy de la actividad () se llama. Pero el servicio no parece hacer nada.


Aquí está el logcat:

07-01 22:35:30.397: DEBUG/ActivityMine(6505): onDestroy() 07-01 22:35:32.667: INFO/ActivityManager(71): Force stopping package my.large.package uid=10036 07-01 22:35:32.667: WARN/ActivityManager(71): Scheduling restart of crashed service my.large.package/.service.ServiceCommunicator in 5000ms 07-01 22:35:32.667: INFO/Process(71): Sending signal. PID: 6505 SIG: 9 07-01 22:35:32.687: INFO/ActivityManager(71): Force stopping service ServiceRecord{451f65b8 my.large.package/.service.ServiceCommunicator} 

Como se puede ver, ServiceCommunicator () no llama: stopService (), finalize (), o onDestroy ()! He puesto las llamadas de registro en los 3 de ellos.

¿Cómo sé cuando el servicio está cerrado por la fuerza? Necesito atrapar ese evento para poder cerrar archivos.

¿Cómo sé cuando el servicio está cerrado por la fuerza?

No lo haces. onDestroy() no está garantizado para ser llamado, en cualquier componente.

Necesito atrapar ese evento para poder cerrar archivos.

Entonces no los deje abiertos.

Esperar que un servicio sea cerrado es algo raro para mí. En cualquier caso, si el proceso se termina, espero que cualquier identificador de archivo abierto sea cerrado por el subsistema linux.

También como se afirma por CommonsWare onDestroy no está garantizado en ningún caso.

Es peor. OnDestroy sólo se llama en el entorno de emulador (para la prueba), pero nunca en un teléfono real ….

Y exactamente como @ mibollmba dijo – los archivos se cerrará cuando el proceso muere. No es necesario manejar el archivo cerca.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.