2011-08-29 27 views
9

Al observar el diagrama del ciclo de vida de la actividad, observo que onPause() y onStop() pueden conducir al "proceso" que se está matando. Esto requeriría llamar al onCreate() cuando el usuario desea reanudar su aplicación. El punto es que onStop() no se llama necesariamente, ni es onDestroy(), pero que onPause() puede ser el único evento que la actividad puede ver. Siendo este el caso, onPause() debe manejar guardar el estado de la aplicación para que el usuario pueda volver a ella más tarde, independientemente de si se llama onStop() o no.Android onStop/onDestroy: ¿cuándo se pueden usar?

Veo que onDestroy() se usa para limpiar los recursos específicos de la actividad que se eliminarían de forma natural en una acción de eliminación de procesos. ¿Hay algo más que onDestroy() sería bueno?

¿Y para qué sería bueno onStop()? ¿Por qué querría anularlo?

Respuesta

4

Si recibí su pregunta correctamente: depende de lo que quiera hacer con su aplicación. Digamos que eres una aplicación de programación que usa GPS. En el onStop() que se llama cuando la actividad ya no es visible para el usuario, puede eliminar estas solicitudes. O puede detener el servicio si su aplicación se está ejecutando. O puede guardar las preferencias (no recomendado, hágalo en onPause() en su lugar), o puede cerrar la conexión permanente a un servidor ..... Si pienso en otra cosa, agregaré más ...

+0

¿qué ocurre con onStop()? – user574771

+0

Disculpa, me refería a 'onStop()', lapsus mentis. :) Editaré mi respuesta –

+0

Parece que usa onStop() en respuesta a que la actividad ya no esté visible, y onPause() sería prematuro para liberar el proveedor de GPS. Pero mi preocupación es que el proceso de matar no puede manejar el lanzamiento de un recurso correctamente. – user574771

0

Otro ejemplo sería registrar y anular el registro de un receptor de difusión.

Tenga en cuenta que generalmente estas cosas se colocan en Repetición y EnPausa, la diferencia es sutil, se invocan a Encendido/EnPausa cuando la actividad se coloca detrás de otra actividad, se invoca a Encendido/Encendido cuando la actividad ya no es visible en el pantalla.

+0

Y la otra diferencia sutil es si están en Inicio y Parada, ¿qué sucede cuando no se llama a OnStop, sino que se mata el proceso? ¿El receptor de la transmisión no está registrado limpiamente? Supongo que lo es. – user574771

2

Si usted ha leído el documento más, verá lo siguiente:

Ahorro estado de actividad

La introducción a la gestión del ciclo de actividad menciona brevemente que cuando se hace una pausa o una actividad detenido, se conserva el estado de la actividad . Esto es cierto porque el objeto Activity aún se mantiene en la memoria cuando está en pausa o detenido; toda la información sobre sus miembros y el estado actual aún está activa. Por lo tanto, cualquier cambio realizado por el usuario dentro de la actividad se conserva en la memoria, de modo que cuando la actividad vuelve al primer plano (cuando "se reanuda"), esos cambios todavía son allí.

Sin embargo, cuando el sistema destruye una actividad para recuperar la memoria , el objeto Activity se destruye, por lo que el sistema no puede simplemente reanudarlo con su estado intacto. En su lugar, el sistema debe recrear el objeto de actividad si el usuario navega de regreso a él. Sin embargo, el usuario es sin saber que el sistema destruyó la actividad y lo recreó y, por lo tanto, probablemente espera que la actividad sea exactamente como estaba.En este situación, puede asegurarse de que la información importante sobre el estado actividad se conserva mediante la implementación de un método adicional de devolución de llamada que le permite guardar la información sobre el estado de su actividad y luego restaurarla cuando el sistema recrea la actividad .

Resumen: Después de completar onStop() El objeto de actividad sigue vivo en la memoria. Y esto ayudará al sistema a restaurar la actividad.

Ejemplo muy básico: considere que está mostrando su actividad al usuario, ¡y de repente su amigo lo llama! Descanse usted puede entender ..

Así que ahora depende de usted que, cuáles son los recursos/objetos/conexiones deben ser liberados en qué evento.