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

Respuesta
 
Herramientas
  #1  
Viejo 09/01/13, 01:07:03
Array

[xs_avatar]
DavidKBD DavidKBD no está en línea
Usuario novato en la web
 
Fecha de registro: ene 2013
Mensajes: 4
Tu operador: Yoigo

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.
Responder Con Cita


  #2  
Viejo 09/01/13, 08:28:31
Array

[xs_avatar]
Kete_ Kete_ no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: abr 2009
Mensajes: 317
Modelo de smartphone: Nexus 6P
Tu operador: Pepephone
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
__________________
Dropbox: 2.25 GB de almacenamiento gratuitos! -- Pincha aquí --> http://db.tt/eZVmSAI


Responder Con Cita
  #3  
Viejo 09/01/13, 10:34:27
Array

[xs_avatar]
DavidKBD DavidKBD no está en línea
Usuario novato en la web
 
Fecha de registro: ene 2013
Mensajes: 4
Tu operador: Yoigo

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.
Responder Con Cita
  #4  
Viejo 09/01/13, 11:35:13
Array

[xs_avatar]
DavidKBD DavidKBD no está en línea
Usuario novato en la web
 
Fecha de registro: ene 2013
Mensajes: 4
Tu operador: Yoigo

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
Responder Con Cita
  #5  
Viejo 09/01/13, 12:41:55
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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!
Responder Con Cita
  #6  
Viejo 09/01/13, 18:31:06
Array

[xs_avatar]
Celtium Celtium no está en línea
Miembro del foro
 
Fecha de registro: may 2010
Mensajes: 432
Modelo de smartphone: Nexus One, 4

 Cita: Originalmente Escrito por mocelet Ver Mensaje
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
Es que es como se debe hacer. DavidKBD tal como plateaste tu app te dará error en muchas ocasiones, siempre que no se cierre bien, y si esto provoca que se corrompan los datos no esta bien planteda.

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 ;)
Responder Con Cita
  #7  
Viejo 09/01/13, 18:34:22
Array

[xs_avatar]
DavidKBD DavidKBD no está en línea
Usuario novato en la web
 
Fecha de registro: ene 2013
Mensajes: 4
Tu operador: Yoigo

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.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 23:34:17 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /