preferencia - sharedpreferences android studio ejemplo
Preferencias compartidas entre dos procesos de la misma aplicaciĆ³n. (3)
En Android <2.3 funciona. Un proceso puede escribir cambios y el otro proceso puede leer los cambios. El código para leer / escribir archivos de preferencias compartidas (en realidad se almacenan en archivos) verifica si se han realizado cambios en el archivo antes de leer / escribir y actualizan su versión en caché en consecuencia.
En Android> 2.3 funciona, pero necesitas establecer específicamente MODE_MULTI_PROCESS
cuando llames a getSharedPreferences()
.
En Android 2.3 está roto y no funciona :-(
Tenga en cuenta que MODE_MULTI_PROCESS
está en desuso en el nivel de API 23 (Android M) .
Estoy escribiendo una aplicación para Android que contiene IU y procesos en ejecución separados. Quiero compartir información simple entre el proceso principal y un servicio definido en mi aplicación que se ejecuta en un proceso diferente. Me parece complicado usar AIDL para la comunicación entre procesos con este fin.
La pregunta es: ¿es seguro usar las preferencias compartidas de la aplicación para comunicarse entre estos dos procesos? Esto es: tanto leer como escribir las mismas preferencias compartidas.
Me pregunto si realmente funciona. En la referencia de los desarrolladores de Android sobre las preferencias compartidas (http://developer.android.com/reference/android/content/SharedPreferences.html), afirman: Nota: actualmente esta clase no admite el uso en múltiples procesos. Esto se añadirá más adelante. pero no sé exactamente qué significa esto.
Gracias por tu ayuda
No; no es seguro hacer esto La nota que citaste es correcta. Hay problemas conocidos que pueden surgir si intenta utilizar SharedPreferences
en varios procesos. (Consulte https://code.google.com/p/android/issues/detail?id=66625 ).
Si desea más pruebas, eche un vistazo al código fuente de SharedPreferencesImpl
, en particular las partes que guardan las preferencias.
He resuelto este problema al evitar que ambos procesos accedan al archivo SharedPreferences
al mismo tiempo. (Aquí hay una forma de proporcionar un bloqueo de procesos cruzados , y aquí hay una implementación de ejemplo completa que escribí ).
Advertencia : Desafortunadamente, MODE_MULTI_PROCESS
ha quedado en desuso en Android M, por lo que puede dejar de funcionar en una versión posterior. Una técnica alternativa como el uso de un ContentProvider
podría ser una mejor opción.
Puede consultar la biblioteca https://github.com/hamsterksu/MultiprocessPreferences que proporciona API de tipo SharedPreferences para acceder a los datos de SharedPreferences a través de un ContentProvider. También parece una buena alternativa después de que Google eliminara MODE_MULTI_PROCESS de Android 6.