|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
No consigo capturar onDestroy
Hola a todo el mundo. Este es mi primer post aquí, pero espero poder participar de vez en cuando si el tiempo me lo permite...
Voy al grano... estoy desarrollando una aplicación con un servicio en background que muestra notificaciones informando del proceso. La cosa es que, cuando cierro manualmente la aplicación, el ciclo de vida se ejcuta correctamente y veo que se pasa por todos los métodos... Si cierro la aplicación desde Ajustes/Aplicaciones -> Forzar detención, también funciona correctamente. Si cierro la aplicación pulsando botón BACK, voy a la lista de aplicaciones (android 4) y la arrastro fuera para que se muera la aplicación, también funciona... PERO, si hago esto mismo (arrastrar aplicación fuera de la lista), pero utilizando el botón HOME, la aplicación muere al instante y no se ejecutan los métodos... con lo cual no puedo capturar el evento y la notificación queda abierta... Si pulso sobre ella tengo problemas ya que al haber muerto la aplicación, se han perdido datos... ¿Alguien sabe como puedo remediar esto? ¿Por qué es diferente matar la aplicación si la has minimizado con HOME de si la has minimizado con BACK? Espero que haya alguien que pueda darme alguna pista, porque he dado mil vueltas y ya no sé que más puedo probar... Saludos, DavidKBD. Última edición por DavidKBD Día 09/01/13 a las 01:11:18. |
|
|
|
#2
|
||||
|
||||
|
Cuando pulsas el botón HOME, la aplicación no se destruye (se quedaría, dentro del ciclo de vida, en el estado onStop()), mientras que en el resto de casos que comentas si
Aquí tienes un resumen de que métodos se llaman cuando se pulsa HOME, BACK, o cuando se vuelve a abrir una app previamente detenida http://stackoverflow.com/questions/5...ollowing-cases Un saludo
__________________
|
|
#3
|
||||
|
||||
|
Hola Kete_, gracias por la información, pero creo que no me expliqué bien... ya sé que la aplicación no se destruye al pulsar HOME... sólo se queda minimizada...
El problema aparece después de pulsar HOME (y no sucede lo mismo pulsando BACK)... es decir, si pulsas el "botón" de aplicaciones abiertas y la finalizas, si previamente habías "minimizado" usando HOME, la aplicación muere sin pasar por los métodos del ciclo de vida. Es decir... Si pulsas botón home, la aplicación se queda en background. En este estado, si pulsas en el "botón" de ver aplicaciones abiertas, y la arrastras para finalizarla, la aplicación muere, y no se ejecuta ningún método onStop, ni nada... Si pulsas botón back, la aplicación se queda en background. En este estado, si pulsas en el "botón de ver aplicaciones abiertas, y la arrastras para finalizarla, la aplicación muere, pero antes pasa por los métodos del ciclo de vida... El problema no está en el momento de pulsar la tecla, si no, en el momento de finalizar la tarea. No entiendo la diferencia, en los 2 casos es matar la aplicación... deberían morir de la misma manera, creo yo... Saludos, DavidKBD. |
|
#4
|
||||
|
||||
|
Ah, vale creo que ya se por donde vas (no estoy en casa, así que no puedo pensarlo mucho y mucho menos probar).
Al pulsar back, la aplicación se destruye, y por eso, cuando la finalizo no hace "algo" que cuando se destruye pulsando home, porque en este segundo caso la aplicación no estaba destruída... En cuanto pueda haré algunas pruebas al respecto. Gracias de nuevo
|
|
#5
|
||||
|
||||
|
No se asegura que el método onDestroy se ejecute (lo pone explícitamente en la documentación de Android), así que no le busques lógica porque es algo interno. Si tienes que liberar algo, guardar el estado o lo que sea, lo mejor es hacerlo en el onPause o en el onStop.
Fuente: http://developer.android.com/intl/de...nDestroy%28%29
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
|
#6
|
||||
|
||||
|
No se asegura que el método onDestroy se ejecute (lo pone explícitamente en la documentación de Android), así que no le busques lógica porque es algo interno. Si tienes que liberar algo, guardar el estado o lo que sea, lo mejor es hacerlo en el onPause o en el onStop.
Fuente: http://developer.android.com/intl/de...nDestroy%28%29 ![]() Procura que los servicios, procesos, funciones, tengan puntos bien definidos de guardado de datos y que si se produce un ruptura del proceso no se puedan quedar los datos a medio cargar. Procura que los datos relacionados se guarden al mismo tiempo no cuando los obtienes, asi te aseguras que si rompe algo y no se completa la toma o calculo de datos no se guardan algunos si y otros no. Suerte ;) |
|
#7
|
||||
|
||||
|
Buah, ya está, muchas gracias... acabo de ver por que no llegaba a ejecutarse nunca el onDestroy, y pido disculpas porque ha sido un despiste mío... pero aún así, viene bien tenerlo en mente porque me parece que es un error que no es demasiado difícil volver a cometerlo:
En el onStop() de la actividad, tenía un super.onStart(); Es lo que sucede si uno no se fija demasiado en lo que autocompleta eclipse... Esto provoca que no se ejecute el onStop de la actividad padre, y por tanto se "rompa" el ciclo de vida, no llegando nunca al onDestroy. Saludos y muchas gracias. (EDITO) Hola Celtium, nos hemos cruzado los posts, no te había leído. Sí, sí, si tengo todo eso bien planteado... lo de los datos que "no puedo recuperar" es lo de menos... todavía no los recupero, pero está así a propósito porque me sirve para darme cuenta de que algo no ha funcionado bien. El problema que tengo realmente, está en como gestionar lo del botón HOME... Amplio toda la información, y explico las últimas averiguaciones... La actividad principal, lanza un servicio. Este servicio muestra notificaciones persistentes, que si pulsas sobre ellas te abren una segunda actividad. Estas 2 actividades se conectan con el servicio para enviar y recibir diferentes datos. Como decía antes... ya he solucionado lo del onDestroy... PERO sigue comportándose raro: Si se pulsa al botón HOME, y después se detiene la aplicación... entonces se ejecuta el método onDestroy (esto es lo que no conseguía antes)... pero me he dado cuenta, o me da la sensación de que el servicio muere inmediatamente después de hacerlo la aplicación. Si se pulsa al botón BACK inmediatamente después se ejecuta el onDestroy, pero el servicio continúa, si después detenemos la aplicación, el servicio sigue funcionando, todo funciona correctamente. El problema de las notificaciones realmente no me importa... me había centrado en él, pero realmente lo que debería de conseguir es que el servicio no muriese... de esta forma la notificación no tendría por que quedar huérfana nunca... ¿A alguien se le ocurre algo? Saludos, DavidKBD Última edición por DavidKBD Día 09/01/13 a las 19:31:12. |
![]() |
Estás aquí
|
||||||
|
||||||