gpt4 book ai didi

java - 这是在单例助手中获取/设置多个 SharedPreferences 的有效方法吗?

转载 作者:行者123 更新时间:2023-12-02 10:11:47 25 4
gpt4 key购买 nike

我的 Android 应用程序使用 SharedPreferences 存储 15-20 个设置对,并且我一直在使用辅助类,因此我不必在每个需要检索它们的类中创建新方法。

一些检索开始花费 >100 毫秒,并且我不确定我当前的方法对于性能是否有效,因为它每次都会传入 Context 并创建一个新的 SharedPreferences 对象。这种情况在应用程序的 AsyncTasks 中多次发生。

这是我一直在做的事情:

public class SharedPrefHelper {

static void setDefaults(String key, String value, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(key, value);
editor.apply();
}

static void setDefaultsInt(String key, int value, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt(key, value);
editor.apply();
}

//... continued with other variable types and getDefault variants
//.......
}

以下是处理此问题的更有效方法吗?

public class SharedPrefHelper {

private static SharedPreferences preferences;

static void init(@NonNull final App app) {
preferences = PreferenceManager.getDefaultSharedPreferences(app);
}
//App is the Application class, init is called in onCreate()

static void setDefaults(String key, String value) {
SharedPreferences.Editor editor = preferences.edit();
editor.putString(key, value);
editor.apply();
}
//... continued with other variable types and getDefault variants
//.......
}

或者还有其他效果更好的变量关键字(final 等)吗?

最佳答案

+100ms 对于如此简单的操作和如此少的键值对来说是很长的时间。
我想问题不在这里。

但是,回答你的问题,是的,提议的替代方案肯定比原来的方案更好。事实上,多次调用 getDefaultSharedPreferences(context) 是没有意义的,因为该方法指向一个默认文件,该文件是在应用程序范围内设置的。

因此只需将其存储为实例/静态字段(但尽可能避免static)。

<小时/>
preferences.edit()

返回一个新的、新鲜的Editor(EditorImpl,它维护更改后的键值对的Map,然后将所有内容保留在apply) 每次调用,所以你完全没问题。

关于java - 这是在单例助手中获取/设置多个 SharedPreferences 的有效方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953524/

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