¿Cuál es la mejor alternativa para las preferencias compartidas en Android?

Cuál es la mejor alternativa para las Shared Preferences en android para almacenar datos, si quiero leer los datos y de nuevo guardarlo con algunos cambios. Los datos pueden ser el perfil de un usuario, una respuesta json o cualquier objeto. Mientras almaceno una gran cantidad de datos, busco otra opción que consuma menos tiempo en los datos Reda / Write. Actualmente mi aplicación toma x milisegundos para pasar de la actividad A a la actividad B. ¿Puedo reducir este tiempo?

Es muy difícil recomendarle algo sin una comprensión profunda de su usecase.

  • Si desea almacenar algunos datos de preferencia de usuario – SharedPreferences puede ser una buena opción.
  • Si desea almacenar datos de autenticación, como los tokens de autenticación de sus usuarios, no utilice SharedPreferences y eche un vistazo a AccountManager .
  • Si desea almacenar datos empresariales, por ejemplo, varias entidades empresariales, que mantienen relaciones entre sí, desea poder consultarlas y / o modificarlas. Le recomiendo que utilice Realm – https: // realm. Io . La alternativa es usar SQLite pero en mi opinión muy subjetiva Realm es mucho más fácil comenzar con.
  • Si sólo desea analizar algunas respuestas basadas en JSON, eche un vistazo a los mecanismos de almacenamiento en caché que su cliente HTTP puede ofrecerle. OkHttp por ejemplo tiene un apoyo bastante bueno para eso.

Hablando de tiempo de carga – SharedPreferences es bastante rápido en general, pero realmente depende de cómo se utiliza. Si almacena estructuras grandes de JSON en ella, léala completamente para encontrar un objeto específico basado en id – obviamente le tomará más tiempo que usar una base de datos real para eso.

Tenga en cuenta que todas las soluciones que he propuesto ( AccountManager , SharedPreferences y SQLite / Realm) pueden funcionar perfectamente entre sí en una sola aplicación. Sólo asegúrese de elegir la herramienta adecuada para un problema dado.

Si hay una gran cantidad de datos que desea almacenar, entonces usted no debe usar las preferencias compartidas, ya que puede obtener desordenado. En su lugar, debe escribir en el almacenamiento interno. Estas son sus opciones:

 **Shared Preferences** Store private primitive data in key-value pairs. **Internal Storage** Store private data on the device memory. **External Storage** Store public data on the shared external storage. **SQLite Databases** Store structured data in a private database. **Network Connection** Store data on the web with your own network server. 

Los tres últimos son los más difíciles, pero los dos primeros son muy fáciles. Aquí es cómo almacenar en el almacenamiento interno, si tiene demasiados datos en las preferencias compartidas:

Nota: Cuando el usuario desinstala su aplicación, estos archivos se eliminan. De los documentos :

Para crear y escribir un archivo privado en el almacenamiento interno:

1. Llame a openFileOutput () con el nombre del archivo y el modo de operación.

2. Esto devuelve un FileOutputStream.

3. Escriba en el archivo con write ().

4. Cierre el flujo con close ().

Por ejemplo:

 String FILENAME = "hello_file"; String string = "hello world!"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close(); 

Recuperar datos también es muy simple:

1. Llame a openFileInput () y pase el nombre del archivo a leer. Esto devuelve un FileInputStream.

2. Lea los bytes del archivo con read ().

3. A continuación, cierre el flujo con close ().

Las preferencias compartidas son buenas para almacenar pares de valores clave sencillos como puntajes altos, configuración de usuario, etc. Si desea guardar un ensayo que el usuario escribió, puede utilizar almacenamiento externo o interno.

Hagame saber si esto fue de utilidad,

Ruchir

No puedo encontrar ninguna forma mejor de guardar los datos del usuario. SharedPreferences se hizo exactamente para ese propósito. Y SharedPreferences no debe impedir que sus actividades se carguen. Así que podría haber algo más bajando su rendimiento.

  • Java Android leer el archivo completo rápidamente
  • Perfomance de red móvil: ¿Cuál sería el tipo de datos más eficiente para transferir datos de un servidor web a un teléfono móvil?
  • HTTP Vs sockets Vanilla para cargar archivos binarios grandes (50-200 MB) desde un dispositivo Android a través de una red Wi-Fi de un solo salto
  • ¿El recolector de basura de Android hace una pausa en otras aplicaciones mientras se ejecuta?
  • Posible BUG en Android Clase ImageDownloader: sHardBitmapCache NO estática cuando debería ser?
  • Vista de lista optimizada con 1k lista de objetos
  • Fondo animado con Libgdx
  • Rendimiento de Android NDK sobre el código Java habitual
  • Android - Prevenga la pantalla blanca al inicio
  • ¿Problemas comunes de rendimiento en Android?
  • ¿Hay alguna sobrecarga significativa en el uso de FragmentActivity sobre la actividad normal en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.