Sobes.tech
Junior

¿Cómo podemos guardar temporalmente un objeto en Android?

sobes.tech AI

Respuesta de la IA

Es posible guardar temporalmente un objeto en Android de varias maneras, la elección depende de su duración y la necesidad de acceder a él después de que el componente haya finalizado:

  • Estado de la Vista: Los objetos relacionados con la Vista se pueden guardar en su estado, que se restaura al volver a crear la Vista (por ejemplo, al rotar la pantalla). Se utilizan onSaveInstanceState() y onRestoreInstanceState().
  • ViewModel: La mejor forma de guardar datos relacionados con la interfaz de usuario que deben sobrevivir a cambios de configuración de la Actividad/Fragmento (por ejemplo, rotaciones de pantalla). ViewModel existe hasta que se destruye el ViewModelStoreOwner.
    // En la Actividad/Fragmento
    val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    
    // En el ViewModel
    class MyViewModel : ViewModel() {
        var myObject: MyData? = null
    }
    
  • onRetainCustomNonConfigurationInstance() (obsoleto): Método en la Actividad para guardar objetos arbitrarios que sobrevivirán a cambios de configuración. getLastNonConfigurationInstance() se usa para obtener el objeto. Obsoleto en favor de ViewModel.
    // En la Actividad
    override fun onRetainCustomNonConfigurationInstance(): Any? {
        return myObjectToRetain
    }
    
    // Para obtener el objeto
    val retainedObject = lastCustomNonConfigurationInstance as? MyData
    
  • Clase Application: Para objetos que deben vivir durante todo el ciclo de vida de la aplicación. Se debe usar con precaución para no almacenar demasiados datos.
  • Archivos temporales: Para objetos más grandes que no caben directamente en la memoria o que requieren almacenamiento temporal en disco.
Método Duración Uso
Estado de la Vista Vida de la Vista + cambios Datos pequeños relacionados con la Vista
ViewModel Vida de la Actividad/Fragmento Datos de la interfaz de usuario que sobreviven a cambios de configuración
onRetainCustomNonConfigurationInstance() Vida de la Actividad + cambios Objetos arbitrarios (obsoleto)
Clase Application Vida de la aplicación Objetos globales
Archivos temporales Determinado por el desarrollador Objetos grandes, almacenamiento temporal