commit() 和 apply() 到底有什么异同?
相同点:
- 二者都是提交 Prefrence 修改数据;
- 二者都是原子过程。
commit()
是直接同步地提交到硬件磁盘,因此,多个并发的采用commit()
做提交的时候,它们会等待正在处理的commit()
保存到磁盘后再进行操作,从而降低了效率。而apply()
只是原子的提交到内容,后面再调用apply()
的函数进行异步操作。- 翻源码可以发现
apply()
返回值为 void,而commit()
返回一个 boolean 值代表是否提交成功。 apply()
方法不会有任何失败的提示。
那到底使用 commit() 还是 apply()?
大多数情况下,我们都是在同一个进程中,这时候的 SharedPrefrence
都是单实例,一般不会出现并发冲突,如果对提交的结果不关心的话,我们非常建议用 apply()
,当然需要确保操作成功且有后续操作的话,还是需要用 commit()
的。