深圳做门户网站的网络公司,厦门网络科技有限公司,花生壳做网站缺点,以学校为目标做网站策划书一、MMKV是什么#xff1f;
MMKV 是基于 mmap 内存映射的 key-value 组件#xff0c;底层序列化/反序列化使用 protobuf 实现#xff0c;性能高#xff0c;稳定性强。也是腾讯微信团队使用的技术。
支持的数据类型
支持以下 Java 语言基础类型#xff1a; boolean、int…一、MMKV是什么
MMKV 是基于 mmap 内存映射的 key-value 组件底层序列化/反序列化使用 protobuf 实现性能高稳定性强。也是腾讯微信团队使用的技术。
支持的数据类型
支持以下 Java 语言基础类型 boolean、int、long、float、double、byte[] 支持以下 Java 类和容器 String、SetString任何实现了Parcelable的类型
二、MMKV的优点
1、 高性能MMKV使用了一些技术手段如mmap文件映射和跨进程通信的共享内存以实现更高效的数据存取操作。MMKV的性能比SharedPreferences快数十倍尤其在读写大量数据时效果更加明显。 2、小存储体积这是因为MMKV使用了一种更高效的序列化算法并且将数据存储在二进制文件中避免了XML解析和序列化的开销。相同数据量情况下MMKV的存储体积可以减少50%以上。
3、 跨进程共享MMKV支持多进程间的数据共享这对于需要在多个进程之间传递数据的应用程序非常有用。MMKV通过共享内存和文件锁定机制来确保跨进程读写数据的一致性和安全性。
4、API简单易用MMKV提供了简洁、易用的API使数据存取变得更加方便。
三、使用方法
官方文档MMKV——基于 mmap 的高性能通用 key-value 组件
1、添加如下依赖
implementation com.tencent:mmkv:1.3.12、初始化MMKV
MMKV 的使用非常简单所有变更立马生效无需调用 sync、apply。 在 App 启动时初始化 MMKV设定 MMKV 的根目录files/mmkv/
例如在您的应用程序的入口点(通常是Application类)中添加以下代码 String rootDir MMKV.initialize(this);Log.e(TAG, MMKV: rootDir);这就是MMKV的存储路径 3、存储和读取数据
3 .1 获取全局MMKV实例
MMKV提供了一个全局的实例也就是说只需要在Application中加载一次就可以全局使用他了。 //获取全局MMKVMMKV mmkv MMKV.defaultMMKV();3.2存储数据
int value 1;
//存储数据
mmkv.encode(Id,value);在这里可以看见MMKV是使用键值对的方法进行存储 3.3 读取数据 //读取数据int idValue mmkv.decodeInt(Id);Log.e(TAG, idValue: idValue);上述代码将从名为Id的键中读取存储的值并将其分配给value。
注意事项MMKV可以存储各种类型的数据包括String、Int、Float、Double、 ByteArray等。您只需要根据需要使用相应的encode和decode方法 3.4 删除数据
//删除数据
mmkv.remove(Id);//读取数据
int idValue mmkv.decodeInt(Id);
Log.e(TAG, idValue: idValue);四、自定义MMKV
4.1 自定义mkkv的表名
如果不同业务需要区别存储也可以单独创建自己的实例
String rootDir MMKV.initialize(this);
Log.e(TAG, MMKV: rootDir);MMKV kv MMKV.mmkvWithID(MyID);
Log.e(TAG, MMKV: kv);注意一定要先initialize MMKV才能建立新的表 如果业务需要多进程访问那么在初始化的时候加上标志位 MMKV.MULTI_PROCESS_MODE
MMKV kv MMKV.mmkvWithID(InterProcessKV, MMKV.MULTI_PROCESS_MODE);4.2 自定义MMKV路径
初始化时指定自定义的MMKV存储路径 String rootDir MMKV.initialize(this, /sdcard/mymmkv);Log.e(TAG, MMKV: rootDir);五、SharedPreferences 迁移
MMKV 提供了 importFromSharedPreferences() 函数可以比较方便地迁移数据过来。MMKV 还额外实现了一遍 SharedPreferences、SharedPreferences.Editor 这两个 interface在迁移的时候只需两三行代码即可其他 CRUD 操作代码都不用改。 //获取SharedPreferences实例SharedPreferences sharedPreferencesOld getSharedPreferences(your_sharedPreferences_name, Context.MODE_PRIVATE);//调用importFromSharedPreferences()进行数据迁移MMKV mmkv MMKV.mmkvWithID(NewsharedPreferences);mmkv.importFromSharedPreferences(sharedPreferencesOld);//可选删除旧的SharedPreferencessharedPreferencesOld.edit().clear().apply();六、MKKV的缺点
1、导致ANT
因为是同步存储数据因此小的数据读写非常快但是大的数据读写就不如SP了同步存储大的数据会使得主线程卡顿导致ANT。
2、无备份
由于直接在磁盘存储所以如果系统出现问题会导致数据直接丢失在这方面SP是有备份的。
3、不支持复杂的数据类型
但是也没必要存储复杂数据类型SP也不支持复杂数据类型后面用Room存储复杂的数据类型就行了。