Preferencias de Jetpack DataStore. En este blog veremos por qué …… de Amit Shekhar | MindOrks | Octubre de 2020

En este blog, veremos por qué necesitamos las preferencias de Jetpack DataStore, aprenderemos cómo implementar las preferencias de Jetpack DataStore en nuestra aplicación de Android y cómo podemos migrar nuestras preferencias compartidas a las preferencias de DataStore.

Publicado originalmente el Blog MindOrks

Compartiré lo que aprendí de la documentación oficial de Android y por qué recomiendo el nuevo Jetpack DataStore de mi experiencia práctica.

Temas que cubrirá el blog:

  • ¿Por qué Jetpack DataStore?
  • SharedPreferences frente a las preferencias de DataStore
  • Implementar las preferencias de Jetpack DataStore
  • Migración de SharedPreferences a las preferencias de DataStore

En primer lugar, ¿por qué este nuevo Jetpack DataStore?

¿Por qué Jetpack DataStore?

Según documentación oficial:

  • Jetpack DataStore es una solución de almacenamiento nueva y mejorada diseñada para reemplazar SharedPreferences.
  • Está construido sobre Corutinas de Kotlin un flujo.
  • Los datos se almacenan de forma asincrónica, coherente y transaccional, superando la mayoría de las desventajas de SharedPreferences.

Las mejoras anteriores son excelentes.

Te diré la razón por la que recomiendo el nuevo Jetpack DataStore desde mi experiencia práctica.

He estado trabajando en una aplicación para Android con más de 200 millones de descargas, la aplicación ha estado en Google Play Store durante más de 7 años. En este largo período de tiempo, la aplicación ha experimentado un tremendo desarrollo, muchas versiones y muchas correcciones de errores.

En algún momento, la aplicación comenzó a recibir ANR (la aplicación no responde).

Razón de ANR: La aplicación realiza una tarea de larga duración en el subproceso de la interfaz de usuario. (más de 5 segundos).

¿Por qué vino este ANR?

La razón principal fue que nuestro archivo de preferencias compartidas se volvió demasiado grande a medida que agregamos un nuevo par clave-valor uno a la vez. Intentamos acceder al valor de una clave específica tan pronto como la aplicación se abre en el hilo de la interfaz de usuario. Sin embargo, la primera vez que accede a SharedPreferences, lee el archivo completo y transfiere los datos a la memoria. Y para nosotros, sucedió en el hilo de la interfaz de usuario.

Esta es una operación de E / S. Esto puede tardar un rato. Para un archivo más grande, esto en nuestro caso condujo a ANR.

Hemos creado nuestra propia solución para esto. Esto está más allá del alcance de este blog. Podría planificar un blog detallado sobre esta solución.

Y la implementación actual de Jetpack DataStore no admite la lectura de datos en el hilo de la interfaz de usuario. Eso me gustó mucho.

Y ahora estamos agregando Jetpack DataStore a nuestra aplicación: CuriousJr – Programación para niños.

Hablemos de SharedPreferences vs DataStore.

SharedPreferences frente a las preferencias de DataStore

Las diferencias entre las preferencias de SharedPreferences y DataStore son las siguientes:

  • Ambos proporcionan API asincrónicas.
  • SharedPreferences proporciona una API síncrona simple, sin embargo No llamadas seguras al hilo de la interfaz de usuario. Las preferencias de DataStore no admiten esto.
  • La coherencia está garantizada en las preferencias de DataStore.
  • El manejo de errores es compatible con las preferencias de DataStore.
  • Las preferencias de DataStore admiten la API Kotlin Coroutines Flow de forma predeterminada.

Por lo tanto, las preferencias de DataStore son una solución mejorada sobre SharedPreferences.

Ahora pasemos a la parte de implementación.

Implementar las preferencias de Jetpack DataStore

Agregue la siguiente dependencia en su nivel de compilación build.gradle.

Nota: asegúrese de que está utilizando la última versión para obtener la versión más estable.

Ahora, al igual que el objeto SharedPreferences, necesitamos crear un objeto de preferencias DataStore.

Entonces creamos dos funciones de extensión utilícelos para leer y escribir datos. Es solo para mayor comodidad.

Luego crearemos claves de preferencia como se muestra a continuación:

Ahora escriba el valor en las preferencias de DataStore:

Para leer datos de las preferencias de DataStore:

Aquí podemos procesar el error con catch operador de flujo.

De esta forma podremos usarlo fácilmente en nuestra aplicación de Android.

Hablemos de migrar de SharedPreferences a las preferencias de DataStore.

Migración de SharedPreferences a las preferencias de DataStore

Cuando se trata de migración, DataStore lo maneja por nosotros. Solo necesitamos especificar los nombres SharedPreferences. Por ejemplo, si «Mindorks-Preferencias«Se llama SharedPreferences, tendremos que hacerlo a continuación:

Cuando comprobamos SharedPreferencesMigration función:

Vemos que hay más opciones disponibles, podemos usarlas en función de nuestros casos de uso.

Esto facilita la migración de SharedPreferences a las preferencias de DataStore.

Estoy actualizando este blog cuando encuentre más información sobre este tema.

Video para este blog: comprobar aquí.

Eso es todo por ahora.

Feliz aprendizaje 🙂

Amit Shekhar

Co-fundador, MindOrks

Muestre su amor compartiendo este blog con sus compañeros desarrolladores.

También seamos amigos Gorjeo, Linkedin, Github, Quora, un Facebook.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *