SharedPreferences是轻量级的数据持久化存储技术,使用XML key/value机制来存储数据
SharedPreferences实例获取方式:
前两中方式最终都会调用第三中方式,第三中相对更加灵活
SharedPreferences sp1 = mActivity.getPreferences(Context.MODE_PRIVATE);
SharedPreferences sp2 = PreferenceManager.getDefaultSharedPreferences(mActivity);
SharedPreferences sp3 = mActivity.getSharedPreferences(SP_FILE_NAME, Context.MODE_PRIVATE);
第一中方式Activity内部:使用当前Activity类名来命名SP文件名,
Activity:
public SharedPreferences getPreferences(int mode) {
return getSharedPreferences(getLocalClassName(), mode);
}
public String getLocalClassName() {
final String pkg = getPackageName();
final String cls = mComponent.getClassName();
int packageLen = pkg.length();
if (!cls.startsWith(pkg) || cls.length() <= packageLen
|| cls.charAt(packageLen) != '.') {
return cls;
}
return cls.substring(packageLen+1);
}
第二种:直接使用包名 + “_preferences”来命名
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
private static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
第三中:上面两种方式最终都调用了第三个方法。
常用方法:
// 所有键值对
Map<String, ?> android.content.SharedPreferences.getAll()
// 是否包含这个键
boolean android.content.SharedPreferences.contains(String key)
// 注册内容修改监听,添加移除修改。clear收不到监听
void android.content.SharedPreferences.registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener)
// 类型安全的getType(,)方法
内部类Editor:
// 类型安全的putType(,)方法
// 移除某个key对应的键值对
Editor android.content.SharedPreferences.Editor.remove(String key)
// 清除所有键值对
Editor android.content.SharedPreferences.Editor.clear()
// 异步提交
void android.content.SharedPreferences.Editor.apply()
// 同步提交,阻塞线程,并且在写入完成之后返回是否操作成功
boolean android.content.SharedPreferences.Editor.commit()