繁体   English   中英

如何获取最新的sharedPreferences

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM