这个问题在这里已有答案:
SharedPreferences用于在Android中保存应用程序数据 .
commit()
和 apply()
都用于保存共享首选项中的更改 .
如Android库中所述:
public abstarct void apply():
与commit()同步地将其首选项写入持久存储,apply()会立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,并且不会通知您任何失败 . 如果此SharedPreferences上的另一个编辑器在apply()尚未完成时执行常规commit(),则commit()将阻塞,直到完成所有异步提交以及提交本身 .
public abstract boolean commit ():
将您的首选项更改从此编辑器更改回其正在编辑的SharedPreferences对象 . 这自动执行所请求的修改,替换当前在SharedPreferences中的任何内容 .
这是否意味着 commit()
所做的更改与 apply()
相比是即时的?哪一个更好?
如果我需要在下一个立即活动中使用相同的共享首选项值,我应该使用哪一个?正如我所看到的,如果更新了Preference的值,则在重新启动应用程序之前不会反映它 .
2 回答
apply() - 返回 void
apply() was added in 2.3 ,它 saves without returning a boolean indicating success or failure.
commit() - 返回 boolean 值 .
如果保存有效,则 commit() 返回true,否则返回false .
apply()
被添加,因为Android开发团队注意到大多数没有人注意到返回值,因此应用更快 .您可以参考以下链接
What's the difference between commit() and apply() in Shared Preference
Commit()
是即时的但执行磁盘写入 . 如果你在ui线程上,你应该调用异步的apply()
.