¿Cómo borrar manualmente un ViewModel de Android?
Con referencia aandroid.arch.lifecycle.ViewModel
clase
ViewModel
tiene un alcance del ciclo de vida del componente de la interfaz de usuario con el que se relaciona, por lo que en unFragment
plicación basada en @, ese será el fragmento del ciclo de vida. Ésto es una cosa buena
En algunos casos uno quiere compartir unViewModel
instancia entre múltiples fragmentos. Específicamente estoy interesado en el caso dondemuchas pantallas se relacionan con los mismos datos subyacentes.
(Los documentos sugieren un enfoque similar cuando se muestran varios fragmentos relacionados en la misma pantalla peroesto puede solucionarse utilizando un solo fragmento de host según la respuesta a continuación.)
Esto se discute en el documentación oficial de ViewModel:
ViewModels también se puede usar como una capa de comunicación entre diferentes Fragmentos de una Actividad. Cada Fragmento puede adquirir el ViewModel usando la misma clave a través de su Actividad. Esto permite la comunicación entre los Fragmentos de manera desacoplada de modo que nunca necesiten hablar directamente con el otro Fragmento.
n otras palabras, para compartir información entre fragmentos que representan diferentes pantallas, laViewModel
debe tener el alcance deActivity
ciclo de vida (y de acuerdo con los documentos de Android, esto también se puede usar en otras instancias compartidas).
Ahora en el nuevo patrón de navegación Jetpack, se recomienda utilizar una arquitectura de "Una actividad / Muchos fragmentos". Esto significa que la actividad dura todo el tiempo que se usa la aplicación.
es decir. cualquier @ compartiViewModel
instancias que tienen un alcance deActivity
el ciclo de vida nunca se borrará; la memoria permanece en uso constante.
Con el fin de preservar la memoria y usar tan poco como sea necesario en cualquier momento, sería bueno poder borrar @ compartiViewModel
instancias cuando ya no es necesario.
Cómo se puede borrar manualmente una ViewModel
de suViewModelStore
o fragmento de soporte?