简介
-
sp可用来持久化存储键值对
-
sp 的底层是由 xml 来实现的,操作 sp 的过程就是xml 的序列化和解析的过程. xml 是存储在磁盘上的,因此考虑到需要 I/O 速度问题,sp 不适宜频繁操作. 同时序列化 xml 是就是将内存中的数据写到xml 文件中,由于 dvm 的内存是很有限的,因此单个 sp 文件不建议太大,具体多大是没有具体要求,但是 DVM 堆内存也就 16M,因此数据大小肯定不能超过这个数字
-
其实 sp 设置的目的就是为了保存用户的偏好和配置信息的,因此不要保存太多的数据
封装好的工具类
-
SP_FILE_NAME 可替换值
-
TContext可替换为项目中的全局上下文(Application实例)
-
apply()和commit()均会立即更改内存中的sp对象,但apply()会将更新异步写入磁盘,而commit()是同步的,因此,应该避免在主线程调用commit()
import android.content.Context; import android.content.SharedPreferences; import java.util.Map; import java.util.Set; public class TSP { private static final String SP_FILE_NAME = "default_config"; // SharedPreferences文件名 private static SharedPreferences mSP; /** * 单例 */ private static final class Holder { private static final TSP instance = new TSP(); } public static TSP getInstance() { return Holder.instance; } private TSP() { if (null != mSP) return; mSP = TContext.getContext().getSharedPreferences(SP_FILE_NAME, Context.MODE_PRIVATE); } /** * set/get各类型的值 */ public void setString(String key, String value) { mSP.edit().putString(key, value).apply(); } public String getString(String key, String defaultValue) { return mSP.getString(key, defaultValue); } public String getString(String key) { return getString(key, ""); } public void setBoolean(String key, boolean value) { mSP.edit().putBoolean(key, value).apply(); } public boolean getBoolean(String key, boolean defaultValue) { return mSP.getBoolean(key, defaultValue); } public boolean getBoolean(String key) { return getBoolean(key, false); } public void setInt(String key, int value) { mSP.edit().putInt(key, value).apply(); } public int getInt(String key, int defaultValue) { return mSP.getInt(key, defaultValue); } public int getInt(String key) { return getInt(key, 0); } public void setLong(String key, long value) { mSP.edit().putLong(key, value).apply(); } public long getLong(String key, long defaultValue) { return mSP.getLong(key, defaultValue); } public long getLong(String key) { return getLong(key, 0); } public void setFloat(String key, float value) { mSP.edit().putFloat(key, value).apply(); } public float getFloat(String key, float defaultValue) { return mSP.getFloat(key, defaultValue); } public float getFloat(String key) { return getFloat(key, 0); } public void setStrSet(String key, Set<String> strs) { mSP.edit().putStringSet(key, strs).apply(); } public Set<String> getStrSet(String key, Set<String> defaultValue) { return mSP.getStringSet(key, defaultValue); } public Set<String> getStrSet(String key) { return getStrSet(key, null); } /** * 某key是否存在 */ public boolean containsKey(String key) { return mSP.contains(key); } /** * 清除某key键值对 */ public void removeAt(String key) { mSP.edit().remove(key).apply(); } /** * 清除所有键值对 */ public void clearAll() { mSP.edit().clear().apply(); } /** * 获取所有键值对 */ public Map<String, ?> getAll() { return mSP.getAll(); } }