MMKV——Android上的使用(替换SP存储)
2021-07-12 本文已影响0人
i小灰
废话不多说,直接上代码
集成步骤:
- 在项目根目录下的 build.gradle 文件中加入
buildscript {
repositories {
mavenCentral()//这行依赖
}
}
allprojects {
repositories {
mavenCentral()//这行依赖
}
}
- 在项目 app 模块下的 build.gradle 文件中加入
dependencies {
implementation 'com.tencent:mmkv-static:1.2.10'
}
从 v1.2.8 起, MMKV 迁移到 Maven Central。老版本 (<= v1.2.7) 仍然在 JCenter。
更多安装指引参考 Android Setup。
在Application中初始化
直接初始化:
MMKV.initialize(this)//(与下面的几选一,一般就使用这个就行)
MMKV 默认把文件存放在$(FilesDir)/mmkv/目录。你可以在 MMKV初始化时自定义根目录:
String dir = getFilesDir().getAbsolutePath() + "/mmkv";
String rootDir = MMKV.initialize(dir);
Kotlin中的使用:
MMKV对象获取:
MMKV 提供一个全局的实例,可以直接使用
import com.tencent.mmkv.MMKV;
//……
//1. 获取默认全局实例 (与下面的几选一,一般就使用这个就行)
var mmkv: MMKV = MMKV.defaultMMKV()
//2. 也可以自定义MMKV对象,设置自定ID (根据业务区分的存取实例)
var mmkv: MMKV = MMKV.mmkvWithID("ID")
//3. MMKV默认是支持单进程的,如果业务需要多进程访问,需要在初始化的时候添加多进程模式参数
var mmkv = MMKV.mmkvWithID("ID", MMKV.MULTI_PROCESS_MODE) //多进程同步支持
存取方法
// 添加/更新数据
mmkv?.encode(key, value);
// 获取数据
int value = mmkv.decodeInt(key);
String value = mmkv.decodeString(key);
//...获取等类型
// 删除数据
mmkv.removeValueForKey(key);
如果需要存取对象,可以用存取对象json字符串的方法,将对象转成json存,取出json转回对象。
SP迁移
MMKV可以调用importFromSharedPreferences方法进行SP的数据迁移,示例代码如下:
MMKV实现了SharedPreferences,Editor两个接口,所以在迁移之后SP的操作代码可以不用更改。
val mmkv = MMKV.mmkvWithID("myData")
val olderData = DemoApplication.mContext?.getSharedPreferences("myData", MODE_PRIVATE)
mmkv?.importFromSharedPreferences(olderData)
olderData?.edit()?.clear()?.apply()
JAVA中的使用:
MMKV对象获取:
MMKV 提供一个全局的实例,可以直接使用
import com.tencent.mmkv.MMKV;
//……
//1. 获取默认全局实例 (一般就使用这个就行)
MMKV kv = MMKV.defaultMMKV();
//2. 也可以自定义MMKV对象,设置自定ID (根据业务区分的存取实例)
MMKV kv = MMKV.mmkvWithID("ID");
//3. MMKV默认是支持单进程的,如果业务需要多进程访问,需要在初始化的时候添加多进程模式参数
MMKV kv = MMKV.mmkvWithID("ID", MMKV.MULTI_PROCESS_MODE); //多进程同步支持
存取方法
/** 添加/更新数据 **/
//存boolean类型
kv.encode("bool", true);
//存int类型
kv.encode("int", Integer.MIN_VALUE);
//存string类型
kv.encode("string", "MyiSMMKV");
/** 获取数据 **/
//获取boolean类型数据
boolean bValue = kv.decodeBool("bool");
//获取int类型数据
int iValue = kv.decodeInt("int");
//获取string类型数据
String str = kv.decodeString("string");
//...等类型的获取
// 删除数据
mmkv.removeValueForKey(key);
如果需要存取对象,可以用存取对象json字符串的方法,将对象转成json存,取出json转回对象。
SP迁移
MMKV可以调用importFromSharedPreferences方法进行SP的数据迁移,示例代码如下:
MMKV实现了SharedPreferences,Editor两个接口,所以在迁移之后SP的操作代码可以不用更改。
MMKV kv = MMKV.mmkvWithID("myData");
SharedPreferences olderData = App.getInstance().getSharedPreferences("myData", MODE_PRIVATE);
kv.importFromSharedPreferences(olderData);
olderData.edit().clear().apply();
MMKV优势及原理与SP的对比请详见链接
https://www.jianshu.com/p/f2d3e7339778
总结
相对于SP而言,MMKV无论是在速度上还是在文件大小上都更具有优势,是一个很方便易用的框架。