I have a helper class用于处理默认的共享首选项。我检索一次首选项,并包装我需要的所有SP方法,提供相同的缓存实例。它就像:
public final class AccessPreferences {
private static SharedPreferences prefs; // cache
private static SharedPreferences getPrefs(Context ctx) {
// synchronized is really needed or volatile is all I need (visibility)
SharedPreferences result = prefs;
if (result == null)
synchronized (AccessPreferences.class) {
result = prefs;
if (result == null) {
result = prefs = PreferenceManager
.getDefaultSharedPreferences(ctx);
}
}
return result;
}
public static boolean contains(Context ctx, String key) {
if (key == null)
throw new NullPointerException("Null keys are not permitted");
return getPrefs(ctx).contains(key);
}
//etc
}
我有两个问题我想绝对肯定:
ctx.getApplicationContext()
?我对Froyo及以上感兴趣
答案 0 :(得分:0)
使用同步,但我建议使用类似ReentrantLock(http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html)而不是“synchronized”。它通常更具性能。
任何上下文都可以工作,只要它当然不是空的。我只想在这里使用应用程序上下文,这将节省您的调用者不必提供它。公开静态引用,如下所示:Static way to get 'Context' on Android?