如何获取最新的sharedPreferences

时间:2012-11-19 11:22:33

标签: java android preference

我有一个后台服务,可以读取cpu使用情况和频率并在通知栏上显示

在应用程序设置(首选项)中,我可以选择仅显示频率加载或两者都

但获取共享首选项的方法不会获得最新的SharedPreference

它只在第一次服务启动时获得SharedPreference,如果我在Preference屏幕中选择了不同的选项,它将不会在服务中更新

这是代码

@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;
}

3 个答案:

答案 0 :(得分:1)

<强>解决

因为我的服务是在单独的进程中运行的,所以我必须在访问共享首选项时添加此标志

private final static int PREFERENCES_MODE = Context.MODE_MULTI_PROCESS;

并像这样改变

sharedPrefs = this.getSharedPreferences("preference name", PREFERENCES_MODE);

答案 1 :(得分:0)

确保您正确地将数据写入共享偏好设置,特别是commit()您的更改,as docs say

  

您在编辑器中所做的所有更改都将进行批处理,而不是复制回   原始的SharedPreferences直到你调用commit()或apply()

以下是示例代码:

SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean( key, value );
editor.commit();

答案 2 :(得分:0)

我认为错误就行了

sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);

你从一个线程中传递'this'的地方?你能用应用程序上下文改变它吗?