MODE_MULTI_PROCESS para SharedPreferences no funciona

tengo unSyncAdapter ejecutándose en su propio proceso por separado del proceso principal de la aplicación.

Estoy usando una clase de envoltura estática alrededor de miSharedPreferences que crea un objeto estático en la carga del proceso (de la aplicaciónonCreate) al igual que:

myPrefs = context.getSharedPreferences(MY_FILE_NAME, Context.MODE_MULTI_PROCESS | Context.MODE_PRIVATE);

El contenedor tiene métodos get y set, como este:

public static String getSomeString() {
    return myPrefs.getString(SOME_KEY, null);
}

public static void setSomeString(String str) {
    myPrefs.edit().putString(SOME_KEY, str).commit();
}

AmbosSyncAdapter y la aplicación utiliza esta clase de contenedor para editar y obtener de las preferencias, esto funciona a veces, pero muchas veces veo elSyncAdapter obtener preferencias antiguas / faltantes en los accesos a las preferencias, mientras que la aplicación principal ve los cambios recientes correctamente.

Según los documentos, creo que elMODE_MULTI_PROCESS El indicador debería funcionar como lo espero, permitiendo que ambos procesos vean los últimos cambios, pero no funciona.

Actualizar:

Porx90sugerencia, he intentado abstenerme de usar un staticSharedPreferences objeto y en su lugar llamandogetSharedPreferences en cada método get / set. Esto causó un nuevo problema, donde el archivo de preferencias se elimina (!!!) en el acceso simultáneo multiproceso. es decir, veo en el logcat:

(process 1): getName => "Name"
(process 2): getName => null
(process 1): getName => null

y desde ese punto todas las preferencias guardadas en elSharedPreferences objeto fueron eliminados.

Esto es probablemente el resultado de otra advertencia que veo en el registro:

W/FileUtils(21552): Failed to chmod(/data/data/com.my_company/shared_prefs/prefs_filename.xml): libcore.io.ErrnoException: chmod failed: ENOENT (No such file or directory)

PD: este no es un problema determinista, vi los registros anteriores después de que ocurriera un bloqueo, pero aún no podía recrear en el mismo dispositivo, y hasta ahora no parecía suceder en otros dispositivos.

OTRA ACTUALIZACIÓN:

He presentado un informe de error sobre esto, después de escribir un pequeño método de prueba para confirmar que este es realmente un problema de Android, marcarlo enhttps://code.google.com/p/android/issues/detail?id=66625

Respuestas a la pregunta(6)

Su respuesta a la pregunta