MODE_MULTI_PROCESS para SharedPreferences não está funcionando

eu tenho umSyncAdapter executando em seu próprio processo separadamente do processo principal do aplicativo.

Estou usando uma classe de invólucro estático em torno do meuSharedPreferences que cria um objeto estático na carga do processo (do aplicativoonCreate) igual a:

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

O wrapper possui métodos get e set, da seguinte maneira:

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

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

AmbosSyncAdapter e o aplicativo usa essa classe de wrapper para editar e obter dos prefs, isso funciona algumas vezes, mas muitas vezes eu vejo oSyncAdapter obtendo prefs antigos / ausentes nos acessos aos prefs, enquanto o aplicativo principal vê as alterações recentes corretamente.

De acordo com os documentos, acho que oMODE_MULTI_PROCESS A flag deve funcionar como eu esperava, permitindo que ambos os processos vejam as alterações mais recentes, mas não funciona.

Atualizar:

Porx90sugestão, tentei não usar um método estáticoSharedPreferences objeto e chamandogetSharedPreferences em cada método get / set. Isso causou um novo problema, onde o arquivo prefs é excluído (!!!) no acesso simultâneo de vários processos. ou seja, vejo no logcat:

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

e a partir desse ponto todos os prefs salvos noSharedPreferences objeto foi excluído.

Provavelmente, isso é resultado de outro aviso que vejo no log:

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)

P.S, este não é um problema determinístico. Vi os logs acima depois que ocorreu uma falha, mas ainda não consegui recriar no mesmo dispositivo e, até agora, parecia não acontecer em outros dispositivos.

OUTRA ATUALIZAÇÃO:

Eu enviei um relatório de bug sobre isso, depois de escrever um pequeno método de teste para confirmar que esse é realmente um problema do Android, marque-o com uma estrelahttps://code.google.com/p/android/issues/detail?id=66625

questionAnswers(6)

yourAnswerToTheQuestion