gpt4 book ai didi

android - 搞乱 android 的共享首选项 - 使用哪个功能?

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:09 25 4
gpt4 key购买 nike

这是一个标准任务:在应用程序的共享首选项中存储一些值,以便以后能够检索它。但是人们会发现有 3 个函数可以在其中存储一个值:

//1.
public static SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context) {}

//2.
public SharedPreferences Activity.getPreferences(int mode) {}

//3.
public SharedPreferences ContextWrapper.getSharedPreferences(String name, int mode) {}

那么现在的问题是:选择哪一个,哪个更好,或者它们每个都有不同的目的?

最佳答案

这是我自己问题的答案:

首先,让我们看一下这三个函数的实现。

//1.
public static SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context), getDefaultSharedPreferencesMode());
}

//2.
public SharedPreferences Activity.getPreferences(int mode) {
return getSharedPreferences(getLocalClassName(), mode);
}

//3.
public SharedPreferences ContextWrapper.getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
}

这里 mBase 是对 Context 类型对象的引用。

我们看到第二个函数调用了第三个函数,这三个函数基本上是等价的,只是参数不同。考虑重载。

接下来,深入到第一个函数的实现,我们可以简化它的调用如下:

//1.
public static SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(context.getPackageName() +
"_preferences", Context.MODE_PRIVATE);
}

同样,对于第二个函数:

//2.
public SharedPreferences Activity.getPreferences(int mode) {
return mBase.getSharedPreferences(getLocalClassName(), mode);
}

总而言之,第一个函数创建了一个名为 <your_package_name>_preferences 的共享首选项文件。 ,第二个函数创建一个共享首选项文件,名称为 <your_class_name> ,最后,第三个函数允许您为共享首选项文件指定任意名称。

不用说,您需要为共享首选项文件指定正确的名称才能检索保存的值。因此,您可以使用第三个函数来自己指定名称,或者根据您之前的保存方式使用第一或第二个函数。

警告!确保您传递的是 Context 类的正确实例。例如,一个困惑的场景看起来像这样:您正在从系统中运行的后台线程保存到共享首选项(例如,当使用 android 开箱即用的 SyncAdapter 框架时)并试图取回从您的 UI 线程保存的值,您可能会得到默认值/错误值!

希望这对其他人有帮助...;)

关于android - 搞乱 android 的共享首选项 - 使用哪个功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37953002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com