我有一个后台服务,可以读取 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);
关于java - 如何获取最新的共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452752/