Consulte la documentación oficial de la actividad de Android – 3 (Comprensión del ciclo de vida de la actividad) | Por Joon Hyung | Abril de 2022
Echemos un vistazo al ciclo de vida de la actividad con referencia a la documentación oficial de Android.
Documentación oficial de Android👇
https://developer.android.com/guide/components/activities/activity-lifecycle
Este artículo es una traducción de documentos oficiales y contiene mis opiniones subjetivas.
Estado activo y pop de la memoria
El sistema de la aplicación finaliza el proceso cuando necesita espacio libre en la memoria RAM. La probabilidad de que el sistema elimine un proceso en particular depende del estado del proceso en ese punto. El estado de un proceso depende del estado de la actividad que se ejecuta en el proceso.
El sistema de aplicación nunca finaliza las actividades directamente en el espacio de memoria libre. En cambio, mata el proceso que ejecuta la actividad, destruyendo la actividad y todas las tareas que se ejecutan en ese proceso.
Por supuesto, el usuario también puede eliminar el proceso eliminando la aplicación a través del administrador de aplicaciones en la configuración.
Guardar y restaurar el estado transitorio de la interfaz de usuario
Al usar su aplicación, los usuarios esperan que el estado de la IU de la actividad cambie la configuración, como rotar o cambiar el modo de ventanas múltiples, y datos persistentes al iniciar otra aplicación y regresar a esa aplicación.Sin embargo, el sistema de solicitud Destruya la actividad para eliminar cualquier estado de la IU almacenado en la instancia de la actividad.
Cuando la actividad se destruye debido a estas restricciones del sistema, el estado de la interfaz de usuario temporal del usuario debe conservarse mediante la combinación de ViewModel, onSaveInstanceState() y el almacenamiento local persistente. Para obtener más información sobre cómo conservar los datos del estado de la IU, consulte Guardar el estado de la IU.
Si los datos de la interfaz de usuario son simples y livianos, como tipos de datos primitivos u objetos simples (por ejemplo, cadenas…), simplemente use onSaveInstanceState() para guardar el estado de la interfaz de usuario. Pero dado que onSaveInstanceState() incurre en costos de serialización/deserialización, principalmente uso tanto ViewModel como onSaveInstanceState().
estado de la instancia
Cuando el usuario presiona el botón Atrás o la actividad se destruye a sí misma, se pierden todos los datos sobre la instancia de la actividad. Naturalmente, no se requiere ninguna acción adicional para tales escenarios, ya que las expectativas del usuario coinciden con el comportamiento del sistema.
Sin embargo, si el sistema destruye la Actividad debido a restricciones tales como cambios de configuración o falta de memoria, Incluso si la instancia de actividad real desaparece, la información que existe en el sistema sigue ahí.Cuando el usuario vuelve a la actividad, el sistema utiliza los datos que guardó la actividad cuando fue destruida. Crear una nueva instancia de la actividad.Hacer.
Los datos almacenados que utiliza el sistema para restaurar su estado anterior se denominan «Estado de instancia», que es una colección de valores clave almacenados en un objeto de paquete.Básicamente, el sistema estado de la instancia del paqueteusar Guarde el diseño de la actividad y la información sobre cada objeto de vista.(por ejemplo: valor de texto ingresado en EditText).
Por lo tanto, cuando la instancia de Actividad se destruye y se vuelve a crear, el estado del diseño se restaura a su estado anterior sin requerir una solicitud por separado. Sin embargo, si hay una gran cantidad de datos de estado en la actividad que deben restaurarse, deben manejarse por separado.
Para que el sistema Android restaure el estado de una vista en una actividad, cada vista debe tener una identificación única, proporcionada como el atributo android:id.
Los objetos de paquete deben ser serializables en el subproceso principal y usar la memoria de proceso del sistema, por lo que son adecuados para almacenar pequeñas cantidades de datos. Si desea conservar más datos, puede usar Almacenamiento local persistente, onSavedInstanceState() o ViewModel.
Guarde el estado de la interfaz de usuario simple y liviano con onSaveInstanceState()
Cuando la Actividad ingresa al estado Detenido, el sistema llama a onSaveInstanceState() para guardar la información de estado en el Paquete de estado de instancia. En este punto, almacena información temporal sobre la jerarquía de vistas de la actividad (por ejemplo: texto de EditText, posición de desplazamiento de ListView…).
Para guardar información adicional sobre el estado de la instancia de la actividad, puede anular (anular) onSaveInstanceState() y agregar el valor clave al objeto Bundle. Al anular onSaveInstanceState(), si desea guardar el estado de la jerarquía de vista en la implementación existente, debe llamar a la implementación de la clase superior.
onSaveInstanceState() no se llama cuando el usuario cierra explícitamente la actividad o llama a finsh().
Si desea guardar la configuración predeterminada del usuario o los datos de la base de datos (tarea de apagado que consume CPU), Cuando su actividad está en primer plano, debe guardarla en su lugarSi no se puede guardar método onStop()Es una buena idea guardar esos datos al llamar. Tenga en cuenta, sin embargo, que es posible que no se llame al método onStop() debido a que no hay suficiente memoria.
Restaurar el estado de la IU activa usando el estado de la instancia guardada
Si la actividad se recrea después de haber sido cerrada previamente, Restaura el estado de la instancia guardada del objeto Paquete pasado a la Actividad por el sistema.puede.
onCreate() se llama independientemente de si el sistema crea o recrea una instancia de la actividad, por lo que debe asegurarse de que el estado del objeto Bundle sea nulo antes de intentar leer. Si es nulo, es porque se creó una nueva instancia y no se restauró la instancia de Actividad destruida anteriormente.
El siguiente fragmento de código muestra un ejemplo de cómo restaurar algunos datos de estado en onCreate().
Además de restaurar el estado en onCreate(), hay otra forma de implementar onRestoreInstanceState(). Este método se ejecuta después de llamar a onStart(). onRestoreInstanceState() solo se llama cuando hay un estado guardado para restaurar. Por lo tanto, no tiene que determinar si el objeto Bundle está vacío.
❗️ Al implementar onRestoreInstanceState(), se debe llamar a la clase principal para que la implementación base pueda restaurar el estado de la jerarquía de vistas.
Hasta ahora, hemos visto cómo administrar y restaurar datos activos. En el próximo capítulo, estudiaremos la transición entre actividades.
Gracias por leer este largo post 🙃