[英]How to get most recent sharedPreferences
我有一个后台服务,可以读取cpu的使用情况和频率并将其显示在通知栏上
在应用程序设置(首选项)中,我可以选择仅显示仅频率负载,或同时显示两个负载
但是获取共享首选项的方法不会获取最新的SharedPreference
它只有在第一次服务启动时才获得SharedPreference,如果我在“首选项”屏幕中选择了不同的选项,它将不会在服务中更新
这是代码
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Runnable runnable = new Runnable() {@Override
public void run() {
while (thread) {
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
items = sharedPrefs.getString("notif", "freq");
System.out.println(items); //this keeps displaying the same value even if i go to Preference screen and change to something else
if (items.equals("freq") || items.equals("both")) {
}
if (items.equals("load") || items.equals("both")) {
} //reading frequency and load depending on what is selected
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mHandler.post(new Runnable() {@Override
public void run() {
if (thread) {
createNotification(); //create notification
}
}
});
}
}
};
new Thread(runnable).start();
return START_STICKY;
}
解决了
因为我的服务在单独的进程中运行,所以在访问共享首选项时必须添加此标志
private final static int PREFERENCES_MODE = Context.MODE_MULTI_PROCESS;
像这样改变
sharedPrefs = this.getSharedPreferences("preference name", PREFERENCES_MODE);
确保正确地将数据写入共享的首选项,特别是按照文档说 , commit()
更改:
您在编辑器中所做的所有更改都将被分批处理,并且直到您调用commit()或apply()时,才将其复制回到原始的SharedPreferences中。
这是示例代码:
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean( key, value );
editor.commit();
我认为错误就在网上
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
您从线程内部传递“ this”在哪里? 您可以使用应用程序上下文进行更改吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.