关于SharePreference提交数据

在android 中存储数据时常常用SharedPreference, 而且在提交数据时一直用的是Editor的commit方法, 今天无心了看到了系统用了apply,看了方法的介绍, 原来这个方法也是能够提交数据的. android

apply方法在官方SDK说明以下: 并发

Commit your preferences changes back from this Editor to the SharedPreferences object it is editing. This atomically performs the requested modifications, replacing whatever is currently in the SharedPreferences. app

Note that when two editors are modifying preferences at the same time, the last one to call apply wins. 异步

Unlike commit, which writes its preferences out to persistent storage synchronously, apply commits its changes to the in-memory SharedPreferences immediately but starts an asynchronous commit to disk and you won’t be notified of any failures. If another editor on this SharedPreferences does a regular commit while a apply is still outstanding, the commit will block until all async commits are completed as well as the commit itself. async

As SharedPreferences instances are singletons within a process, it’s safe to replace any instance of commit with apply if you were already ignoring the return value. 函数

You don’t need to worry about Android component lifecycles and their interaction with apply() writing to disk. The framework makes sure in-flight disk writes from apply() complete before switching states. this

The SharedPreferences.Editor interface isn’t expected to be implemented directly. However, if you previously did implement it and are now getting errors about missing apply(), you can simply call commit from apply(). atom

这两个方法的区别在于: 
1. apply没有返回值而commit返回boolean代表修改是否提交成功 
2. apply是将修改数据原子提交到内存, 然后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,所以,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操做,从而下降了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从必定程度上提升了不少效率。 
3. apply方法不会提示任何失败的提示。 
因为在一个进程中,sharedPreference是单实例,通常不会出现并发冲突,若是对提交的结果不关心的话,建议使用apply,固然须要确保提交成功且有后续操做的话,仍是须要用commit的。 component

相关文章
相关标签/搜索