在活动和服务之间共享共享的偏好?

时间:2019-01-20 09:04:07

标签: java android sharedpreferences

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

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

我正在考虑在我用于读取/编写这样的上下文变量的类中为静态上下文变量创建一个setter / getter:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:fillAfter="true">

<rotate
    android:duration="500"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="180" />
</set>

我面临的问题是,当应用程序启动时ctx为null,在专用服务使用setter编写ctx变量之前,没有人可以使用共享首选项。

我试图这样改变吸气剂:

 fun rotate(view: View) {

    val rotate = AnimationUtils.loadAnimation(
            applicationContext,
            R.anim.rotate
    )

    frame.startAnimation(rotate)

}

但这只会使我的应用程序挂起。

确保解决此问题的正确方法是什么? (也许有些东西比使用setters / getters或singletons更明显)

1 个答案:

答案 0 :(得分:2)

您可以像下面这样使用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");