MMKV——1.使用

1.MMKV——1.使用
2.MMKV——2.原理

前言

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();

以上内容在官方文档中都有详细说明,还有日志,Native Buffer,数据恢复等内容,参见:https://github.com/Tencent/MMKV/wiki/android_advance_cn

你可能感兴趣的:(MMKV——1.使用)