Я не уверен, действительно ли мне это нужно прямо сейчас, но если мое приложение когда-либо расширяется, я мог бы увидеть эту возможность. У меня в основном есть обертка вокруг SharedPreferences
, которая вытягивает несколько значений из SharedPreferences
и связывает их с объектом. Он также принимает объект и использует его для обновления настроек. Я хотел сделать его потокобезопасным, но я хотел попробовать его с помощью Семафора. Мой SharedPreferences
обертка получит ссылку на класс ниже от getSyncedPrefManager()
. Затем он вызовет aquireLock()
, а затем getPref()
, выполнит свою работу, а затем позвонит releaseLock()
. Означает ли это что-то, что сработает, или я не согласен с базой?Android Thread Safe SharedPreferences
public class SyncedPreferenceManager {
private final static SyncedPreferenceManager me =
new SyncedPreferenceManager();
private SharedPreferences prefs;
private static Semaphore mutex;
public static SyncedPreferenceManager getSyncedPrefManager(){
return me;
}
private SyncedPreferenceManager(){
mutex = new Semaphore(1, true);
}
public SharedPreferences getPref(Context caller){
if(prefs == null)
prefs = PreferenceManager.getDefaultSharedPreferences(caller);
return prefs;
}
public boolean aquireLock(){
try {
mutex.acquire();
} catch (InterruptedException e) {
return false;
}
return true;
}
public boolean releaseLock(){
mutex.release();
return true;
}
}
Мне любопытно, что вы нашли, когда вы сравнили это SharedPreferences поддержанные реализацию в вашу реализацию SQLite. Я провел аналогичные тесты и обнаружил, что SharedPreferences будет примерно в 50 раз быстрее, чем SQLite, поэтому я использую SharedPreferences везде, где я не храню тонны данных. –
Я перешел в систему 'SQLite' некоторое время назад, и с тех пор он работает намного быстрее. Тем не менее, я в значительной степени сделал полную переписку приложения, так что это могло быть несколько вещей, которые способствовали этому. В любом случае гораздо проще работать с 'SQLite', чем' SharedPreferences' (и более «правильно»), по крайней мере, для моих целей. – Eliezer