今天看到《技术小黑屋》写的一篇名为 “为什么程序员应该尝试写一写博客?”,对我影响蛮大的,反思一下,以前确实没有认真思考过,虽然以前也写过一些博客,但都是看资料然后写的,原创度很低,所以要从现在开始,我要开始好好维护一下自己的博客啦!
数据保存通用的有五种方法,参看 http://www.cnblogs.com/dubo-/p/5597306.html
这里着重介绍一下 SharedPreferences 的实现原理。SharedPreferences 是一个轻量级的存储工具,存储的数据很少,而且数据类型很单一,保存基于XML文件存储的key-value键值对数据,SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现,但是 他有一个优点就是使用比较方便易懂。用过 SharedPreferences 的童鞋应该知道,它不是直接new 出来的,那就说明它不是一个类,其实它是一个接口,我们只能通过 Contex(Activity).getSharedPreferences(String name, int mode) 的方式来得到他的实例。那么这里Context 和 Activity 有什么区别?如下:
调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享
调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用,其实这个就是Activity和Context的区别。
Contex(Activity).getSharedPreferences(String name, int mode) 的两个参数分别表示 文件名、存储模式,存储模式一共有4种:
MODE_PRIVATE :只能是建立文件的程序可以访问
MODE_WORLD_READABLE :所有程序都可以访问文件但是不能更改
MODE_WORLD_WRITEABLE :所有程序都可以改变文件的内容
MODE_APPEND :检查文件,文件存在则在文件的末尾添加,不存在则建立文件并在里面添加内
以上大家都了解了什么是 SharedPreferences ,接下来要说的就是 保存数据的时候,提供了同步的commit和异步的apply来保存数据,那么为什么要提供两种呢?
区别:(1)commit 是直接将数据存到硬盘中的,而 apply 是将数据传到内存中,继而异步到磁盘中,如果有多个commit 并发提交数据的时候,只能排队一次提交,这样大大降低了效率;
(2)commit 会返回信息,但是 apply 不会给出任何提示信息,就算保存失败也不会提示。
保存基于XML文件存储的key-value键值对数据