首页 > 解决方案 > 在活动和服务之间共享共享偏好?

问题描述

我想在我的活动和我的服务之间共享相同的键/值对。由于所有人都有不同的上下文,我假设我需要在所有人之间共享一个特定的上下文。

它不能是任何活动的上下文,因为给定的活动可能不会一直在内存中。(当我的后台服务在手机启动时启动时尤其如此,因此在用户点击应用程序图标之前根本不存在任何活动。)

我正在考虑在我用来读取/写入上下文变量的类中为静态上下文变量创建一个 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 或单例更明显的东西)

标签: javaandroidsharedpreferences

解决方案


您可以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");

推荐阅读