一、SharedPreferences简介
Android 中的 SharedPreferences(后续简称SP)是轻量级的数据存储方式,能够保存简单的数据类型,比如 String、int、boolean 值等。应用场合主要是数据比较少的配置信息。其内部是以 XML 结构保存在 /data/data/包名/shared_prefs 文件夹下,数据以键值对的形式保存。
使用Preference来存取数据,用到了SP接口和SP的一个内部接口SharedPreferences.Editor,这两个接口在android.content包中。
调用Context.getSharedPreferences(String name,int mode)方法得到SP接口。该方法的第一个参数是文件名称,第二个参数是操作模式。操作模式有三种:MODE_PRIVATE(私有)、MODE_WORLD_READABLE(可读)、MODE_WORLD_WRITEABLE(可写)。
SP提供了获得数据的方法,如getString(String key,String defValue)、getInt(String key,int defValue)等。调用SP的edit()方法返回SharedPreferences.Editor内部接口,该接口中提供了保存数据的方法,如putString(String key,String value),putInt(String key,int value)等,调用该接口的commit()方法可以将数据进行保存。
二、SP性能优化点
- SP文件没有被加载到内存时,调用getSharedPreferences方法会初始化文件并读入内存。
- 版本低于android_H或使用了MULTI_PROCESS标志时,每次调用getSharedPreferences方法时都会读入。
- Editor的commit方法,每次执行时同步写入磁盘。
- Editor的apply方法,每次执行时在单线程池中加入写入磁盘Task,异步写入。
1、尽量不要直接调用SharedPreferences进行读写操作。
public void saveUserId(){
getSharedPreferences(fileName,mode).edit().putString(“user_id”,value);
}
if(sp.getUserId()>0){
int id=sp.getUserId();
...
}
五、其他程序访问本程序的配置数据方式
Context otherAppContext = createPackageContext("com.gary.appdisplaycontrol", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = otherAppContext.getSharedPreferences("preferences",Context.MODE_WORLD_READABLE|Context.MODE_MULTI_PROCESS);