我不确定我现在是否真的需要这个功能,但如果我的应用程序扩展,我可以看到这种可能性。我基本上有一个SharedPreferences封装器,它将SharedPreferences中的几个值拉出并将它们捆绑到一个对象中。它也需要一个对象并用它来更新首选项。我想让它线程安全,但我想用信号量来尝试它。我的SharedPreferences包装将从getSyncedPrefManager()中获得对以下类的引用。然后它将调用aquireLock(),然后调用getPref(),完成它的工作,然后调用releaseLock()。这看起来像什么东西可以工作,或者我离开基地?
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;
}
}