SharedPreferences - apply()与commit()

时间:2017-12-15 09:35:44

标签: android sharedpreferences

我知道apply和commit之间的区别。 在我的情况下,我想使用commit(),但是android建议我使用apply(),因为它在后台运行,并且不会阻塞主线程。

如果我使用apply,那么这样的事情是否有效?或者是否可能在调用之前没有更新它?

editor.putBoolean("TEST", true)
editor.apply()

if (preferences.getBoolean("TEST")) {
   //do something
}

2 个答案:

答案 0 :(得分:10)

我希望它能够发挥作用,就像documentation所述:

  

apply()立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,并且不会通知您任何失败。

当您访问相同的首选项对象(是单身)时,您应始终看到一致的视图。

答案 1 :(得分:2)

apply()写入临时Map,后来异步写入磁盘。 如果在您的情况下立即使用getBoolean()之类的方法,它将首先查找临时Map中是否存在此键的值并将其返回。

检查SharedPreferencesImpl的源代码,确切了解它是如何工作的。