【问题标题】:SharedPreferences - apply() vs. commit() [duplicate]SharedPreferences - apply() 与 commit() [重复]
【发布时间】:2018-05-29 11:47:55
【问题描述】:

我知道申请和提交之间的区别。 就我而言,我想使用commit(),但android 建议我使用apply(),因为它在后台运行并且不会阻塞主线程。

如果我使用 apply,这样的事情会起作用吗?或者 apply 在调用之前没有更新它吗?

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

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

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    我希望它能够工作,就像它在 documentation 中所说的那样:

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

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

    【讨论】:

    • 那么为什么会有“commit()”这样的函数呢?
    • 如果您需要知道写入是否成功,commit 很有用。如果您不使用该信息,请始终使用 apply
    • commit() 存在于原始 API 级别 1 中,apply() 是在 API 级别 9 中引入的。如果写入磁盘操作成功,commit() 返回 true,而使用 apply()你必须抱最好的希望。
    • 非常有用的评论。谢谢@蒂姆
    【解决方案2】:

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

    查看SharedPreferencesImpl 的源代码,看看它是如何工作的。

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 2013-04-01
      • 2020-05-03
      相关资源
      最近更新 更多