java - 如何获取最新的共享首选项

标签 java android preference

我有一个后台服务,可以读取 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/

相关文章:

android - 开始后无法在android中停止Animator

java - 从线程中更改 boolean 变量时,java中的long gc收集

android - 将字符串转换为 uri 为位图以显示在 ImageView 中

android - PreferenceActivity 中不同高度的偏好

java - Dr Java 代码错误

java - android 中的自定义 MediaPlayer 类

java - 两次输入时扫描仪循环不会循环

java - 使用 compose() 而不是 lambda 表达式的原因是什么?

android - 升级到Cordova Android 8.0后,Gradle无法同步

java - 如何在 Eclipse 中添加关键字以搜索首选项