为什么共享首选项提交失败

时间:2014-10-24 08:13:02

标签: android sharedpreferences

在我的android服务中,我注册了一个动作用户,它将一个String值写入默认的共享首选项。同时我在服务中有另一个函数,它将Hashset写入共享首选项。我在两种情况下都使用了commit。

关于用户当前操作:

PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("abc", udata).commit();

另一个功能:

if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putStringSet("si",ssetdata).commit())

有时候第二次写作失败的原因是什么?是因为

"请注意,当两个编辑器同时修改首选项时,最后一个调用commit将获胜。 "

3 个答案:

答案 0 :(得分:2)

使用申请第一个,并提交第二个可能有帮助,如下所述:

与commit()不同,commit()将其首选项同步写入持久存储,apply()立即将其更改提交到内存中的SharedPreferences,但启动异步提交到磁盘,您不会收到任何通知故障。如果此SharedPreferences上的另一个编辑器在apply()尚未完成时执行常规commit(),则commit()将阻塞,直到完成所有异步提交以及提交本身。

Read more here

答案 1 :(得分:1)

您的服务是否在单独的流程中运行? (请参阅android:process中的AndroidManifest.xml属性)

如果是这样,您必须使用SharedPreferences打开MODE_MULTI_PROCESS

答案 2 :(得分:0)

尝试只调用SharedPreference ,然后使用editor提交您的数据:

                SharedPreference SP;
                SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
                editor = SP.edit();

                //...
                    editor.putString("abc", udata);
                    editor.commit();
                //...
                    editor.putStringSet("si",ssetdata)
                    editor.commit()