MMKV_MMKV——1.使用

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:18   3139   0

前言

MMKV是有腾讯开发的高性能key-value组件,可以完美替代SharedPreferences。

项目地址:https://github.com/Tencent/MMKV

使用

1.安装引入

dependencies {

implementation 'com.tencent:mmkv-static:1.1.1'

// "1.1.1" 可以被任何可用的版本替代

}

2.初始化

MMKV的使用也很简单,经过初始化后就能进行存取数据了,初始化一般放在Application的onCreate()方法中。

public void onCreate() {

super.onCreate();

if (Build.VERSION.SDK_INT == 19) {

//一些 Android设备(API level 19)在安装/更新APK 时可能出错, 导致 libmmkv.so 找不到。

String dir = getFilesDir().getAbsolutePath() + "/mmkv";

MMKV.initialize(dir, new MMKV.LibLoader() {

@Override

public void loadLibrary(String libName) {

//开源库[ReLinker](https://github.com/KeepSafe/ReLinker) 专门解决这个问题

ReLinker.loadLibrary(MyApplication.this, libName);

}

});

} else {

//👇初始化代码,数据默认存储在:

//context.getFilesDir().getAbsolutePath() + "/mmkv"

MMKV.initialize(this);

}

}

除了上面的方法外,也提供了其他初始化方法,酌情使用:

//👇指定日志级别

initialize(Context context, MMKVLogLevel logLevel)

//👇指定存储地址和日志级别

initialize(String rootDir)

initialize(String rootDir, MMKVLogLevel logLevel)

//👇MMKV.LibLoader用来解决Android 设备(API level 19)在安装/更新 APK 时出错问题

initialize(String rootDir, MMKV.LibLoader loader)

initialize(String rootDir, MMKV.LibLoader loader, MMKVLogLevel logLevel)

3. CRUD 操作

介绍CRUD操作前,首先要了解MMKV支持的数据类型:

支持以下 Java 语言基础类型:

boolean、int、long、float、double、byte[]

支持以下 Java 类和容器:

String、Set、任何实现了Parcelable的类型

MMKV提供一个默认的全局实例,使用MMKV.defaultMMKV()获取,然后通过该实例进行CRUD 操作

MMKV kv = MMKV.defaultMMKV();

//所有类型的数据操作类似,👇以布尔值做统一示范

kv.encode("bool", true);

boolean bValue = kv.decodeBool("bool");

kv.removeValueForKey("bool");

kv.removeValuesForKeys(new String[]{"int", "long"});

boolean hasBool = kv.containsKey("bool");

4.区别存储

MMKV支持区别存储,可以满足将数据存储在不同文件的需求。

MMKV mmkv = MMKV.mmkvWithID("TEST");

mmkv.encode("bool", true);

5.多进程支持

无论是使用defaultMMKV还是mmkvWithID方法,上文介绍的方式都是d单进程的,如果需要多进程支持,需要传入标志位,如下:

//👇第二个参数是加密密钥,null表示明文,可以设置加密秘钥进行加密

MMKV mmkv = MMKV.defaultMMKV(MMKV.MULTI_PROCESS_MODE, null);

MMKV mmkvTest = MMKV.mmkvWithID("TEST", MMKV.MULTI_PROCESS_MODE);

6.SharedPreferences 迁移

如果你之前使用SharedPreferences存储了大量数据,MMKV提供了API帮助你快速进行数据迁移。

//SharedPreferences preferences = getSharedPreferences("TEST", MODE_PRIVATE);

//将👆SharedPreferences替换为👇MMKV

MMKV preferences = MMKV.mmkvWithID("TEST");

// 👇再将之前SharedPreferences的旧数据迁移至MMKV,并清空SharedPreferences

SharedPreferences old_man = getSharedPreferences("TEST", MODE_PRIVATE);

preferences.importFromSharedPreferences(old_man);

old_man.edit().clear().commit();

// MMKV实现了SharedPreferences和Editor接口,所以之前的数据存储不需要做任何变化👇

SharedPreferences.Editor editor = preferences.edit();

editor.putBoolean("bool", true);

editor.putInt("int", Integer.MIN_VALUE);

editor.putLong("long", Long.MAX_VALUE);

editor.putFloat("float", -3.14f);

editor.putString("string", "hello, imported");

// 无需调用 commit(),apply()方法存储数据,在put时,数据已经进行了存储,当然调用了也不妨事,MMKV中的这两个方法都是空实现

//editor.commit();

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP