java - 在活动和服务之间共享共享偏好?
问题描述
我想在我的活动和我的服务之间共享相同的键/值对。由于所有人都有不同的上下文,我假设我需要在所有人之间共享一个特定的上下文。
它不能是任何活动的上下文,因为给定的活动可能不会一直在内存中。(当我的后台服务在手机启动时启动时尤其如此,因此在用户点击应用程序图标之前根本不存在任何活动。)
我正在考虑在我用来读取/写入上下文变量的类中为静态上下文变量创建一个 setter/getter,如下所示:
public class temp_shared_context {
public static Context ctx = null;
public static Context getCtx() { return ctx; }
public static void setCtx(Context ctx) { temp_shared_context.ctx = ctx; }
}
我面临的问题是,当应用程序启动时 ctx 为空,在专用服务使用设置器写入 ctx 变量之前,没有人可以使用共享首选项。
我试图像这样改变我的吸气剂:
public static Context getCtx() {
while (ctx == null) {}
return ctx;
}
但这只会让我的应用程序挂起。
确保解决此问题的正确方法是什么?(也许有比使用 setter/getter 或单例更明显的东西)
解决方案
您可以PreferenceManager.getDefaultSharedPreferences(getContext());
像下面这样使用:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
sharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("variable", value);
editor.apply();
你可以从你的应用程序中获取任何你想要的值,如下所示:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String value = sharedPreferences.getString("variable", "default_value");
推荐阅读
- laravel - 从 laravel 中的控制器获取 for 循环中 $i 的所有值以显示在视图中
- javascript - Onchange JavascripCode 无法正常工作
- php - 产品列表 - 产品标题正在切割 - Advada 主题,wordpress
- c - 为什么标准 C 库不需要分为头文件和实现文件?
- objective-c - 有没有办法在 NSApplicationMain 之前修改参数?
- ios - 在 iOS 上,是否可以仅为包含应用程序设置 NEPacketTunnelProvider VPN?
- node.js - PM2 命令未在 PowerShell 脚本下运行
- css - 透视在 FireFox 上不起作用
- java - 使用增删词的索引和内容更新原句
- python - python 2相当于带有pandas df的get_dummies