原文出处:http://www.ccbu.cc/android/shareperferences-intro
SharedPerferences是Android系统提供的一种轻量级的数据存储方式,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。
SharedPreferences提供了java常规的Long、Int、String等类型数据的保存接口,使用键值对的方式来进行数据存储,SharedPreferences文件是使用XML格式来对数据进行管理的,保存在在/data/data/(packageName)/shared_prefs目录下。
SharedPerferences存储的特点:
- 轻量级
- 存储简单数据类型
- 以键值对的形式
- 基于XML文件存储
- 占用的是私有数据空间
SharedPreferences的四种操作模式:
- Context.MODE_PRIVATE
- Context.MODE_APPEND
- Context.MODE_WORLD_READABLE
- Context.MODE_WORLD_WRITEABLE
模式 | 说明 |
---|---|
MODE_PRIVATE | 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容 |
MODE_APPEND | 模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件 |
MODE_WORLD_READABLE | 表示当前文件可以被其他应用读取 |
MODE_WORLD_WRITEABLE | 表示当前文件可以被其他应用写入 |
获取SP(SharedPerferences)的方法:
- PerferencesManager.getDefaultSharedPreferences(context);//不推荐使用
- context.getSharedPreferences("指定SP的名称", Context.MODE_PRIVATE);
- Activity类中的getPreferences(int mode)方法 // 该方法只接受一个模式参数,这个方法会自动将当前活动的类名做为SharedPreferences的文件名
存储内容:
haredPerferences sp = context.getSharedPerferences("mySp", Context.MODE_PRIVATE);
SharedPerferences.Editor editor = sp.edit();
editor.putString("name", name);//put方法有很多,参数都是键值对
editor.commit();//最后提交修改即可
读取内容:
SharedPerferences sp = context.getSharedPerferences("mySp", Context.MODE_PRIVATE);
String name = sp.getString("name", null);//get方法对应put,参数是键和默认值
SP是一个单例对象,支持多线程。
-
SharedPerferences.Editor有两种提交方法
- abstract boolean commit() 该方法是将内容提交到磁盘
- abstract void apply() 该方法是将内提交至内存,异步的进行磁盘IO操作
在并发环境中后一个commit请求会等待前一个commit执行完毕后再执行;而apply则会直接覆盖掉前一个apply
所以,在不关心数据提交成功与否的情况下,尽可能使用apply提高性能。
SP使用建议
- APP版本升级并不会删除原有SP文件,有必要可以将APP版本号储存至SP文件中
- 应该减少单个SP文件的大小
- 只应该在单进程使用SP,否则有可能发生数据安全风险