2011-05-24 17 views
42

De acuerdo con el ciclo de vida de actividad de Android, la única devolución de llamada garantizada para ser llamada (si una actividad deja el estado En ejecución, que normalmente se espera) es onPause().¿Por qué implementar onDestroy() si no se garantiza que se invoque?

Por lo tanto, debo suponer que hay escenarios en los que tiene sentido para implementar onStop()onDestroy() y aunque no son realmente garantizado a ser llamado.

Entiendo que onStop() debe implementarse cuando es posible que una actividad regrese al estado En ejecución a través del estado Detenido (por qué hacer eso en lugar de regresar directamente es una pregunta diferente).

Pero la necesidad de onDestroy(), cuando puedo colocar toda la limpieza/ahorro de estado en onPause(), no me queda claro.

¿Puede describir una situación de aplicación real (es decir, no análoga a conducir un automóvil, etc.) en la que tendría sentido implementar onDestroy()?

+0

Porque en circunstancias normales, se llamará a onDestroy(). Es solo que no está garantizado que se lo llame. Por ejemplo, si tu proceso es asesinado por el asesino. – Falmarri

+2

@Falmarri Pero una aplicación bien escrita debe diseñarse para el peor de los casos. ¿Estás implicando una mejora del rendimiento en circunstancias normales? – uTubeFan

+0

¿Por qué está usando ese diagrama (2008 !?) en lugar del [oficial] (http://developer.android.com/images/activity_lifecycle.png)? Esto es algo que ha cambiado bastante desde 1.5. – dmon

Respuesta

25

Se llamará a Destroy si llama explícitamente a finish(); tú mismo.

Su actividad principal llama a startActivityForResult en una actividad de mapa.

Registra la actividad con un LocationListener, el usuario hace clic en el mapa y selecciona, por ejemplo, un restaurante local.

La actividad entonces, configura algunos extras que se enviarán de vuelta a su actividad principal, luego se llama explícitamente a finish(); en sí mismo y en el onDestroy mata el LocationListener y otras variables que has invocado.

acaba de encontrar esto en los documentos

OnDestroy() = La última llamada que reciba antes de que se destruye su actividad. Esto puede suceder ya sea porque la actividad está terminando (alguien llamado finish() o porque el sistema está destruyendo temporalmente esta instancia de la actividad para ahorrar espacio. Puede distinguir entre estos dos escenarios con el método isFinishing()

+1

+1 para señalar esto. ¿Esto significa que si nunca llamo 'finish()', 'onDestroy()' no se puede implementar? – uTubeFan

+0

Puede implementarlo. onDestroy se llamará en otros puntos (cuando su aplicación está en segundo plano y el sistema operativo lo está matando). – Blundell

+1

como @Poldie states onDestroy también se invoca cuando su actividad muere y se recrea (cuando su actividad va de vertical a horizontal en el teléfono que se mueve). – Blundell

Cuestiones relacionadas