我知道apply和commit之间的区别。
在我的情况下,我想使用commit()
,但是android建议我使用apply()
,因为它在后台运行,并且不会阻塞主线程。
如果我使用apply,那么这样的事情是否有效?或者是否可能在调用之前没有更新它?
editor.putBoolean("TEST", true)
editor.apply()
if (preferences.getBoolean("TEST")) {
//do something
}
答案 0 :(得分:10)
我希望它能够发挥作用,就像documentation所述:
apply()
立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,并且不会通知您任何失败。
当您访问相同的首选项对象(是单身)时,您应始终看到一致的视图。
答案 1 :(得分:2)
apply()
写入临时Map
,后来异步写入磁盘。
如果在您的情况下立即使用getBoolean()
之类的方法,它将首先查找临时Map
中是否存在此键的值并将其返回。
检查SharedPreferencesImpl的源代码,确切了解它是如何工作的。