2015-03-03 3 views
0

У меня есть открытый статический метод в одном из моих классов для моего приложения, который сохраняет число в SharedPreferences после его увеличения. Например, если значение предпочтения длиннее 1, метод будет читать предпочтение 1 в длинной переменной, а затем увеличивать его до 2 и ставить так долго в предпочтение.Проблема синхронизации SharedPreferences?

Должен ли я когда-либо беспокоиться о проблемах синхронизации? Сначала я так не думаю, потому что мое приложение не многопоточно? Он использует службы Android, но я думаю, что это только однопоточная.

+0

где и как вы получаете доступ к значениям предпочтений. У вас есть прослушиватель предпочтений? – Raghunandan

+0

Аналогичный вопрос: http://stackoverflow.com/questions/4693387/sharedpreferences-and-thread-safety – hidro

+0

Я получаю доступ к нему из общедоступного статического метода подкласса класса Service. Метод имеет входной параметр Context, и я использую Context.getSharedPreferences для доступа к Preference и SharedPreferences.Editor.putLong для записи в Preference. – bloodpresage

ответ

3

Java имеет решение для Synchronization просто реализовать метод в synchronized структуре в следующем виде»

public synchronized void modifyPreferences(long input) 
{ 
    //Do some stuff 
} 

SharefPreferencesdocumentation говорит об использовании apply() против commit() для сохранения изменений:

Использование apply() Обратите внимание, что, когда два редактора изменяют предпочтения в одно и то же время, последний для вызова применяет выигрыши.

В отличие от commit(), который синхронно записывает свои предпочтения в постоянное хранилище, apply() немедленно вносит свои изменения в операторы SharedPreferences в памяти, но запускает асинхронную фиксацию на диск, и вы не будете уведомлены о каких-либо сбоях. Если другой редактор этой SharedPreferences выполняет регулярную фиксацию(), а apply() все еще неактивен, commit() будет блокироваться до тех пор, пока все асинхронные транзакции не будут завершены, а также сам commit.

Надеюсь, это поможет.

Смежные вопросы