getDefaultSharedPreferences(Context) - 任何上下文?

时间:2013-12-30 20:15:52

标签: android multithreading sharedpreferences android-context

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
}

我有两个问题我想绝对肯定:

  • 我是否需要像我一样进行同步,或者简单的volatile是否足够?当然,这个帮助程序类由不同的线程(UI,Intent服务等)访问。
  • 检索共享偏好设置时是否需要调用ctx.getApplicationContext()

我对Froyo及以上感兴趣

1 个答案:

答案 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?