1.MMKV
对于经常使用的快速本地化存储,Android中往往会选择SharedPreferences来作为存储方式。SharePreferences作为Android库中自带的存储方式,在使用方式上很便捷,但是往往存在以下一些问题。
①线程阻塞:通过getSharedPreferences可以获取SP实例,从首次初始化到读到数据会存在延迟,因为读文件的操作阻塞调用的线程 直到文件读取完毕。如果在主线程调用可能会对UI流畅度造成影响。
②文件跨进程共享问题:SharedPreferences虽然支持设置MODE_MULTI_PROCESS标志位,但是跨进程共享SP存在很多问题,所以不建议使用该模式。
③二次写入:将数据写入文件需要将数据拷贝两次再写入到文件中,如果数据量过大,也会有很大的性能损耗。
MMKV解决了SharedPreferences的以上问题,MMKV是基于mmap内存映射的移动端通用key-value组件,相对于SP而言,MMKV无论是在速度上还是在文件大小上都更具有优势,是一个很方便易用的框架。
MMKV存储支持以下Java语言基础类型:boolean、int、long、float、double、byte[]、String、Set<String>、任何实现了Parcelable的类型。MMKV中对象存储方式是转化成json串,通过字符串存储,使用的时候再取出来反序列化。
文章来源地址https://www.toymoban.com/news/detail-457481.html
MMKV存储的优势:
①非常高效:MMKV使用mmap与文件保持内存同步,由操作系统负责将内存回写到文件,不必担心crash导致数据丢失。使用protobuf对数值进行编码/解码,充分利用Android,实现最佳性能。
②多进程并发:MMKV支持进程之间的并发读写访问。
③易于使用:可以随时使用MMKV。所有的更改都会立即保存,不需要同步,也不需要apply调用。
④少数几个文件(小):MMKV包含进程锁、编码/解码帮助程序和mmap逻辑等,很整洁。
MMMKV无论是在写入性能还是在读取性能,都远远超越SharedPreferences和SQLite,尤其是在Android多进程key-value存储组件上MMKV是不二之选。
2.MMKV使用方法
①引入依赖
在build.gradle文件中加入
implementation 'com.tencent:mmkv-static:1.2.10'
②在Application中初始化
MMKV.initialize(this);
MMKV 默认把文件存放在$(FilesDir)/mmkv/目录。也可以在 MMKV初始化时自定义根目录:
String dir = getFilesDir().getAbsolutePath() + "/mmkv";
String rootDir = MMKV.initialize(dir);
③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); //多进程同步支持
④存取方法
添加/更新数据:
kv.encode("bool", true); //存boolean
kv.encode("int", Integer.MIN_VALUE); //存int
kv.encode("string", "MyiSMMKV"); //存string
获取数据:
boolean bValue = kv.decodeBool("bool"); //获取boolean
int iValue = kv.decodeInt("int"); //获取int
String str = kv.decodeString("string"); //获取string
删除数据:
mmkv.removeValueForKey(key);
如果需要存取对象,可以用存取对象json字符串的方法,将对象转成json存,取出json转回对象。
3.SharedPreferences迁移
MMKV提供了importFromSharedPreferences()方法进行SP的数据迁移。
MMKV还额外实现了SharedPreferences、SharedPreferences.Editor这两个接口,在迁移的时候只需两三行代码即可,其他CRUD操作代码都不用改。
MMKV kv = MMKV.mmkvWithID("myData");
SharedPreferences olderData = App.getInstance().getSharedPreferences("myData", MODE_PRIVATE);
kv.importFromSharedPreferences(olderData);
olderData.edit().clear().apply();文章来源:https://www.toymoban.com/news/detail-457481.html
到了这里,关于Android MMKV的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!