我现在不确定是否需要,但如果我的应用程序扩展了,我可以看到可能性。基本上,我有一个包装器,围绕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;
}
}
SQLite
系统,自那以后它的运行速度快多了。然而,我基本上对应用程序进行了完全重写,因此可能有几个因素导致了这种情况。无论如何,至少对于我的目的来说,使用SQLite
比使用SharedPreferences
更容易(并且更“正确”)。 - Eliezer