MMKV键值对存储的基本使用

MMKV键值对存储

简介

MMKV是腾讯推出的基于mmap内存映射的key-value组件,底层序列化和反序列化使用protobuf实现,性能高,稳定性强。

github地址:GitHub - Tencent/MMKV: An efficient, small mobile key-value storage framework developed by WeChat. Works on Android, iOS, macOS, Windows, and POSIX.

与SharedPreferences的对比

1. 数据加密

SharedPreferences只是把键值对保存在本地文件中,没有自主进行数据的加密;而MMKV使用了AES CFB-128算法来加密和解密数据。

2.迁移方便

SharedPreferences已存储的数据可以通过简单的代码迁移到MMKV中。

3.支持更多的数据类型

MMKV支持Java语言基础类型:boolean、int、long、float、double、byte[]等,还支持String类和容器Set< String>等。

MMKV的使用

添加依赖

dependencies {
    implementation 'com.tencent:mmkv:1.3.1'
}

初始化

public class ThisApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MMKV.initialize(this);
    }
}

定义一个继承于Application的类,并在AndroidManifest.xml文件中声明。MMKV将会在App启动时初始化好。

CRUD操作

MMKv mmkv = MMKV.defaultMMKV();
//使用MMKV.defaultMMKV()可以获取到MMKV的全局实例(单例)。

写入数据

mmkv.encode("data1", "写入的数据");
mmkv.encode("data2", 12);
byte[] bytes = {'m', 'm', 'k', 'v'};
mmkv.encode("bytes", bytes);

赋给同一个key不同的值就可以更新数据

读取数据

Log.d("TAG", "onCreate: data1" + mmkv.decodeString("data1"));
Log.d("TAG", "onCreate: data2" + mmkv.decodeInt("data2"));
Log.d("TAG", "onCreate: data" + Arrays.toString(mmkv.decodeBytes("bytes")));

删除数据

//通过指定的一个key移除一个键值对
mmkv.removeValueForKey("data1");
​
//通过多个key移除多个键值对
mmkv.removeValuesForKeys(new String[]{"data2", "bytes"});

另外还有:

MMKV的实例还有这几个清空方法和计数方法。

mmkv.allkeys();//获取全部的key值
mmkv.containsKey("data1");//判断是否包含key
  • 如果不同业务需要区别存储,也可以单独创建自己的实例:

MMKV m = MMKV.mmkvWithID("FirstMMKV");
m.encode("bool", true);
MMKV mm = MMKV.mmkvWithID("SecondMMKV");
Log.d("TAG", "onCreate: " + mm.containsKey("bool"));//false

通过不同的ID生成相互独立的mmkv。

  • 如果业务需要多进程访问,可以在初始化的时候加上标志位MMKV.MULTI_PROCESS_MODE

MMKV mmm = MMKV.mmkvWithID("ThirdMMKV", MMKV.MULTI_PROCESS_MODE);
  • 自定义根目录

MMKV默认会把文件存放在$(FilesDir)/mmkv/目录里,这个FileDir可以根据初始化的MMKV的返回值得到。

public class ThisApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        String fileDir = MMKV.initialize(this);
        Log.d("TAG", "onCreate: " + fileDir);
    }
}

也可以在初始化时自定义根目录:

String fileDir = getFilesDir().getAbsolutePath() + "mmkv_0";
String rootDir = MMKV.initialize(this, fileDir);
Log.d("TAG", "onCreate: " + rootDir);

还支持将某个MMKV的实例定义到自定义的目录中 使用时:

String mmkvDir = getFilesDir().getAbsolutePath() + "firstMMKV";
MMKV mmkv = MMKV.mmkvWithID("FirstMMKV", mmkvDir);

SharedPreferences迁移到MMKV

调用MMKV的实例的importFromSharedPreferences()方法实现迁移。

MMKV m = MMKV.mmkvWithID("MMKV");
SharedPreferences sp = getSharedPreferences("SP", MODE_PRIVATE);
m.importFromSharedPreferences(sp);//将SharedPreferences的实例传入
​
//正常使用SharedPreferences
@SuppressLint("CommitPrefEdits")
SharedPreferences.Editor spe = sp.edit();
spe.putInt("Int", 233);
spe.commit();//这里的commit不用也可以
​
Log.d("TAG", "onCreate: " + m.decodeInt("Int"));

m.importFromSharedPreferences(sp);可以写在数据写入之前或数据写入之后,任何地方。

学习参考:MMKV基本使用与源码解析_大渔歌_的博客-CSDN博客

MMKV 原理、使用以及简单封装_android mmkv 封装_J.H.C的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值