使用原因:SharedPreferences多线程取值失效,有位熊兄弟推荐使用香飘飘MMKV存储利器,不香赔钱。然而我抱着赔钱的心态玩了一下,真香!!
MMKV优势
- 使用零拷贝技术之一
mmap
内存映射的key-value组件,用户空间可以共享内核空间的数据,减少内核空间到用户空间的拷贝次数 - 采用性能最佳的
protobuf
协议 - 稳定,最先使用在iOS中,后续Android也可以使用这真香利器
-
性能比SharedPreferences香多了
那就开始玩耍吧~~~
添加依赖
build.gradle
加上依赖,具体版本可访问github项目网址:https://github.com/Tencent/MMKV
dependencies {
implementation 'com.tencent:mmkv-static:1.2.8'
}
初始化MMKV
可在onCreate初始化MMKV
@Override
public void onCreate() {
super.onCreate();
MMKV.initialize(this);
}
真香使用
import com.tencent.mmkv.MMKV;
// 创建默认实例
MMKV kv = MMKV.defaultMMKV();
// 创建自己的实例
// param1:库的key
// param2:库的模式(多进程或单进程)
MMKV kv2 = MMKV.mmkvWithID("test", MMKV.MULTI_PROCESS_MODE);
// set值 布尔值
kv.encode("bool", true);
// get值 布尔值
boolean bValue = kv.decodeBool("bool");
// set值 整形
kv.encode("int", Integer.MIN_VALUE);
// get值 整形
int iValue = kv.decodeInt("int");
// set值 字符串
kv.encode("string", "Hello from mmkv");
// get值 字符串
String str = kv.decodeString("string");
// set值 float
kv.encode("float",30f);
// get值 float
float floatValue = kv.decodeFloat("float");
// set值bytes
kv.encode("bytes", bytes);
// get值bytes
byte[] b = kv.decodeBytes("bytes");
// set值double
kv.encode("double", Double.MIN_VALUE);
// get值double
Double d = kv.decodeDouble("double");
// set值long
kv.encode("long", Long.MAX_VALUE);
// get值long
Long l = kv.decodeLong("long");
// set值 set集合
kv.encode("set", new HashSet<String>(2) {{
add("1");
add("2");
}});
// get值 set集合
Set<String> set = kv.decodeStringSet("1");
// 获取所有keys
String[] strArray = kv.allKeys();
// 获取kv总数
long lo = kv.totalSize();
// 是否存在key
boolean hasBool = kv.containsKey("bool");
// 删除单个
kv.removeValueForKey("test");
// 删除多个
kv.removeValuesForKeys(new String[]{"test1", "test2"});
// 删除缓存值,后续调用将从磁盘中加载所有键值
kv.clearMemoryCache();
// 删除所有数据
// 底层调用clearAl()
kv.clearAll();
// 删除所有数据
// 删除磁盘中加载所有键值
kv.clearAll();
iOS 篇请跳转此地址:https://www.jianshu.com/p/57734e33da8d