我想在我的活动和服务之间共享相同的键/值对。由于所有人都有不同的上下文,因此我认为我需要在所有人之间共享一个特定的上下文。
这不能是任何活动的上下文,因为给定的活动可能不会一直存储在内存中。 (尤其是当我的后台服务在电话启动时启动时,因此在用户点击应用程序图标之前根本没有任何活动。)
我正在考虑在我用于读取/编写这样的上下文变量的类中为静态上下文变量创建一个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更明显)
答案 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");