一.基本介绍
1.简单介绍
SharedPreferences是一种轻型的存储方式,它的原理是基于xml存储key-value键值对数据,通常用来存储一些简单的配置信息。
存储位置:/data/data/{包名}/shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
2.优缺点分析
优点:
SharedPreferences对象与SQLite数据库相比,更加的轻量级,不需要创建数据库,创建表,写SQL语句等一系列的操作。
缺点:
①SharedPreferences只支持这几种类型的数据:boolean、 int 、float、 long、String
②它不支持条件查询等,所以尽管SharedPreferences操作起来非常方便,但它也只能作为存储方式的一种补充,而无法完全替代SQLite数据库等其他数据存储方式。
3.获取SharedPreferences对象
由源码可知SharedPreferences本身是一个接口,程序无法直接创建它的实例,但是可以通过Context提供的方法来获取实例。方法有两个
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
}
/** @removed */
@Override
public SharedPreferences getSharedPreferences(File file, int mode) {
return mBase.getSharedPreferences(file, mode);
}
一般我们是用第一个,即
getSharedPreferences(String name, int mode)
来获取它的实例,该方法的第二个参数支持如下几个值:
Context.MODE_PRIVATE :只被本地程序读写。
Context.MODE_WORLD_READABLE :能被其他程序读。
Context.MODE_WORLD_WRITEABLE :能被其他程序读、写。
关于这部分的源码(部分略去)
public abstract class Context {
/** @hide */
@IntDef(flag = true, prefix = {
"MODE_" }, value = {
MODE_PRIVATE,
MODE_WORLD_READABLE,
MODE_WORLD_WRITEABLE,
MODE_APPEND,
})
@Retention(RetentionPolicy.SOURCE)
public @interface FileMode {
}
/** @hide */
@IntDef(flag = true, prefix = {
"MODE_" }, value = {
MODE_PRIVATE,
MODE_WORLD_READABLE,
MODE_WORLD_WRITEABLE,
MODE_MULTI_PROCESS,
})
@Retention(RetentionPolicy.SOURCE)
public @