У меня возникают проблемы с попыткой заставить SharedPreferences работать.Android SharedPreferences, несовместимый между несколькими процессами
это код:
/**
* Sets the software in synchronizing status.
* @param synchronizing Boolean
*/
public void setSynchronizing(boolean synchronizing) {
if(D) Log.d(TAG, "Called: setSynchronizing("+synchronizing+")");
SharedPreferences preferences = mContext.getSharedPreferences(SharedPrefsConstants.PREFERENCES, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(SharedPrefsConstants.SYNCHRONIZING, synchronizing);
boolean result = editor.commit();
if(!result)
Log.w(TAG, "Cannot store the preference.");
if(!synchronizing)
BroadcastUtils.stopSynchronizing(mContext);
}
/**
* Returns whether the software is synchronizing.
* @return True if synchronization is happening.
*/
public boolean isSynchronizing() {
SharedPreferences preferences = mContext.getSharedPreferences(SharedPrefsConstants.PREFERENCES, 0);
boolean synchronizing = preferences.getBoolean(SharedPrefsConstants.SYNCHRONIZING, false);
if(D) Log.d(TAG, "Called: isSynchronizing Returning: "+synchronizing);
return synchronizing;
}
и это выход LogCat, обратите внимание, что я использую два отдельных процессы в моем приложении, я буду называть их приложением и приложения: Б.Г.:
**app** D/StorageManager﹕ Called: setSynchronizing(true)
**app** D/StorageManager﹕ Called: setSynchronizing(true)
**app** D/StorageManager﹕ Called: isSynchronizing Returning: true
**app** D/StorageManager﹕ Called: isSynchronizing Returning: true
**app:bg** D/StorageManager﹕ Called: setSynchronizing(false)
**app** D/StorageManager﹕ Called: isSynchronizing Returning: true
StorageManager одноэлементно экземпляр, но есть два из этих случаев, один для каждого процесса.
Даже если функция setSynchronizing (false) вызывается из фонового потока, файл физических предпочтений изменяется правильно, но в потоке переднего плана он по-прежнему является истинным.
Вы можете видеть, что isSynchronizing method возвращает true после того, как setSynchronizing устанавливает эту переменную в false. Вопрос: для чего это происходит? Это первый раз, когда я использую SharedPreferences в этом программном обеспечении, поэтому его нельзя установить нигде.
Это файл настройки хранятся внутри телефона, когда isSynchronizing еще возвращение TRUE:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="synchronizing" value="false" />
</map>
Единственное, что я могу думать о том, что SharedPreferences держит какое-то кэш в памяти, если вы можете подтвердите это, есть способ принудительно обновить SharedPreference?
Я также должен сказать, что между переменной, заданной как false, и любым другим последующим вызовом isSynchronizing из переднего плана, происходит значительное количество времени.
Как это возможно? – dymmeh
Извините за это, отредактированный вопрос. –
У вас вы пытались удалить приложение и снова установить его? – Emmanuel