在我的android服务中,我注册了一个动作用户,它将一个String值写入默认的共享首选项。同时我在服务中有另一个函数,它将Hashset写入共享首选项。我在两种情况下都使用了commit。
关于用户当前操作:
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("abc", udata).commit();
另一个功能:
if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putStringSet("si",ssetdata).commit())
有时候第二次写作失败的原因是什么?是因为
"请注意,当两个编辑器同时修改首选项时,最后一个调用commit将获胜。 "
答案 0 :(得分:2)
使用申请第一个,并提交第二个可能有帮助,如下所述:
与commit()不同,commit()将其首选项同步写入持久存储,apply()立即将其更改提交到内存中的SharedPreferences,但启动异步提交到磁盘,您不会收到任何通知故障。如果此SharedPreferences上的另一个编辑器在apply()尚未完成时执行常规commit(),则commit()将阻塞,直到完成所有异步提交以及提交本身。
答案 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()