标签:
@会不断补充的
1、sharedPreferences对象的初始化
三种方式:
1)getSharedPreferences(String name, int mode)
2)PreferenceManager的方法getSharedPreferences()
3)getDefaultSharedPreferences方法
第二三种都是使用系统默认的xml作为sharedPreferences存储数据的文件。
第一种是自己创建的xml文件,用来存储数据。
区别在于第一种相对来说,应用的场景更加广泛。而二三方法可以用来生成储存整个app状态的缓存。
2、SharedPreference.Editor的apply和commit方法
// 偶然IDE提醒使用apply在某个场景更好。
这两个方法的区别在于:
1)apply没有返回值而commit返回boolean表明修改是否提交成功
2)apply提交的内容先提交到内存,然后提交到xml上,其中过程中存在两个实例同时提交,前者被后者覆盖的情况,
而commit是直接提交到xml上,当出现两个实例同时提交的情况,会同步处理。所以相对来说commit在线程安全上更加优越,但是速度上有所牺牲。
3)但一般sharedPreferences是单实例,一般不会出现并发冲突,所以使用apply会更快些。
3、SharedPreference的一般应用场景:
a、检查用户是不是第一次登陆
b、应用程序最后一次更新时间检查
c、保存用户登录用户名
d、保存应用程序的状态
e、缓存用户的位置信息
4、一个很好的使用SharedPreference的方式:SharedPreferences + 单例 = 缓存
private ParentCache(Context context){
parentPreferences = PreferenceManager.getDefaultSharedPreferences(context);
}
public static ParentCache getInstance(Context context) {
if(parentCache == null) {
parentCache = new ParentCache(context.getApplicationContext());
}
return parentCache;
}
public void clearCache() {
parentPreferences.edit().clear().apply();
}
5、访问其他应用中的Preference 的方式(copy)
// 如果访问其他应用中的Preference,前提条件是:该preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。如:有个为cn.yang.action的应用使用下面语句创建了preference。
getSharedPreferences(“TEST”, Context.MODE_WORLD_READABLE);
1)其他应用要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference ,访问preference时会在应用所在包下的shared_prefs目录找到preference :
Context otherAppsContext = createPackageContext(“cn.yang.action”, Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences(“TEST”, Context.MODE_WORLD_READABLE);
String name = sharedPreferences.getString(“name”, “”);
int age = sharedPreferences.getInt(“sex”, “”);
2)如果不通过创建Context访问其他应用的preference,也可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如:
File xmlFile = new File(“/data/data//shared_prefs/itcast.xml”);//应替换成应用的包名
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qq_22939165/article/details/47739701