Preferencias compartidas entre dos procesos de la misma aplicación

Estoy escribiendo una aplicación de Android que contiene tanto la interfaz de usuario como los procesos separados que se ejecutan. Quiero compartir información sencilla 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 para este propósito.

La pregunta es: ¿Es seguro usar las Preferencias Compartidas de la aplicación para comunicarse entre estos dos procesos? Esto es: leer y escribir las mismas preferencias compartidas.

Me pregunto si realmente funciona. En la referencia de los desarrolladores de android acerca de las preferencias compartidas (http://developer.android.com/reference/android/content/SharedPreferences.html) indican: Nota: actualmente esta clase no admite el uso a través de múltiples procesos. Esto se agregará más tarde. Pero no sé exactamente qué significa esto.

Gracias por tu ayuda

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 (que realmente se almacenan en archivos) comprueba si se han realizado cambios en el archivo antes de leer / escribir y actualizar su versión en caché en consecuencia.

En Android> 2.3 funciona, pero es necesario configurar específicamente MODE_MULTI_PROCESS al llamar a getSharedPreferences() .

En Android 2.3 está roto y no funciona 🙁

Tenga en cuenta que MODE_MULTI_PROCESS está obsoleto en el API Level 23 (Android M) .

Puede consultar la biblioteca https://github.com/hamsterksu/MultiprocessPreferences que proporciona SharedPreferences-como las API para acceder a los datos de SharedPreferences a través de un ContentProvider. También parece una buena alternativa después de que Google eliminó MODE_MULTI_PROCESS de Android 6.

No; No es seguro hacerlo. La nota que usted cita es correcta. Hay problemas conocidos que pueden ocurrir si intenta utilizar SharedPreferences través de varios procesos. (Consulte https://code.google.com/p/android/issues/detail?id=66625 .)

Si desea obtener más pruebas, eche un vistazo al código fuente de SharedPreferencesImpl , en particular a las partes que guardan las preferencias.

He trabajado alrededor de este problema al impedir que ambos procesos accedan al archivo SharedPreferences al mismo tiempo. (Aquí hay una forma de proporcionar bloqueo de proceso cruzado , y aquí hay un ejemplo completo de implementación que escribí ).

Advertencia : Desafortunadamente, MODE_MULTI_PROCESS ha quedado obsoleto 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 opción mejor.

  • Las preferencias compartidas de Android no funcionan
  • Android Studio - Explorador de archivos de Android Device Monitor no funciona
  • Modo seguro para cifrar / descifrar la preferencia compartida en Android
  • Conversión de JSONArray a matriz normal
  • SharedPreferences en iOS 4
  • Android SDK equivlent para viewWillAppear (iOS)?
  • SharedPreferences: ¿Es una clase o una interfaz?
  • Advertencia de método obsoleto de Android con respecto a PreferenceActivity
  • ¿Cómo puedo almacenar una Matriz de Integer en SharedPreferences en Android?
  • PreferenceManager.setDefaultValues ​​readAgain parámetro y nuevas preferencias
  • Cuando Android SharedPreferences commit () devuelve false?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.