¿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?
- ¿Cuál es la diferencia entre BaseAdapter y ArrayAdapter?
- Android - GC_FOR_ALLOC liberado 6346K, 7% gratis, pausado 143ms, total 143ms
- Cómo mejorar el rendimiento de JS menú arrastrar en WebView en Android
- ¿Cómo utilizar las variables estáticas de manera eficiente?
- XPath.Evaluar el rendimiento se ralentiza (absurdamente) en varias llamadas
- Vista de desplazamiento en dos direcciones (en diagonal) como en la aplicación Google Sheets de Google android
- Disminuir la velocidad de View Pager en android
- La vista de dibujo de Android es muy lenta
- ¿Por qué el perro String.format de android es lento?
- ¿Por qué la API de Android solicita un parámetro de resultados en lugar de un método de devolución?
- Android: Ampliación del libro de contactos del usuario. Rendimiento ContentProvider vs Sqlite vs Lista en la memoria
- PhoneGap 1.4 embalaje Sencha Touch 2.X - ¿Qué pasa con el rendimiento?
- Android y OOP - Variables globales vs heredados Getters en fragmentos
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 aAccountManager
. - 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.
- Continuar tarea después de terminar todas las tareas
- ¿Cómo puedo enviar múltiples tipos de datos con Intent.ACTION_SEND_MULTIPLE al usar shareIntent?