SharedPreferences是Android中存储数据的一种方式,它简单快捷,通常用于纪录一些配置设置信息,用起来非常爽。但也有不爽的地方就是要记录的东西多了就很乱。最近在整理项目代码的时候就发现了这个问题。先不扯淡,先温习总结一下SP的用法。
Android中得到SharedPrefernces方法的方法有三种。分别是:Context
滴getSharedPreferences(String name, int mode)
;Activity
滴getPreferences(int mode)
和PreferenceManager.getDefaultSharedPreferences(Context context)
;文章先介绍SharedPreferences的基本用法,然后在介绍三种方法的区别。
SharedPreferences的基本用法
先通过Context.getSharedPreferences(String name, int mode)方法来得到的SharedPreferences为例介绍。为什么用这个方法,因为我比较喜欢这个方法,它可以让我们自己指定SP的名字。用这个方法生成的SP有一种亲儿子的感觉。
上关键代码:
|
|
editTextName
和editTextAge
是两个EditText
。当我在里面分别输入Tony,32之后执行上面代码。
我们通过DDMS查看在我们项目的目录下shared_prefs
目录下增加了一个diy.xml
,diy
是我上面起的名字。把它拷贝到电脑,其中内容如下,当然很多时候age是int值,那就进行一下类型转化,使用putInt方法就可以了:
|
|
通过生成的文件可以看出,SharedPreferences实际的结构是一个map,通过key-value的方式存储的。理解这一点就很简单了。
从SharedPreferences中取值的方法就是:
|
|
这样我们就可以存储一些简单的配置信息,在应用下次启动的时候继续使用这些配置。
如果必要的时候需要清除这些信息可以使用:
|
|
所配置的信息就会被清除。
如果有必要的话,需要监听一个配置信息是不是有改变,就可以使用OnSharedPreferenceChangeListener
接口,然后使用SP的registerOnSharedPreferenceChangeListener
方法注册一个变化监听器。
但是这个并不是很常用。代码也十分简单,我就不演示了。
三种方法得到SharedPreferences的区别
Context的方法
Context
滴getSharedPreferences(String name, int mode)
上面的介绍过了,名字是我们指定的。
Activity的方法
而通过Activity
滴getPreferences(int mode)
方法创建得到的SharePreferences
的文件名称是:{Activity's local name}.xml
,这是我从DDMS看的,有兴趣的人也可以自己去看看。{Activity's local name}
是Activity的本地名字,即包涵本地包名的名字。例如我的PSActivity
的完整包名:demo.me.mydemoapplication.sp.PSActivity
,我的项目包名为:demo.me.mydemoapplication
,那么Activity的本地名称为:sp.PSActivity
,而生成的SP的xml文件名为:sp.SPActivity.xml
。另一种方法进入Activity
滴getPreferences(int mode)
的源码:
|
|
它最终调用的Context的getSharedPreferences方法传入的名称为这个类的本地名称。
PreferenceManager的方法
PreferenceManager.getDefaultSharedPreferences(Context context)
方法得到的SP的文件名称为:{app_package}_preferences.xml;这个是以应用包名命名的SP。源码感兴趣的可以自己去看。最终还是使用的Context的方法。