androidmmkv的简单介绍
本篇文章给大家谈谈androidmmkv,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Android之MMKV介绍
- 2、Android 轻量级存储方案(SharedPreferences、MMKV、Jetpack DataStore)
- 3、Android MMKV - 性能强悍的存储工具(腾讯出品)
Android之MMKV介绍
MMKV——基于 mmap 的高性能通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。
从 2015 年中至枣御今,在 iOS 微信上使用已有近 3 年,其性能和稳定性经过了时间的验证。
近期已移植到 Android 平台。在腾讯内部开源半年之后,得到公司内部团队的广泛应用和一致好评。
通过 mmap 内存映射文件,提供一段可供随时写入的内存块,棚岩芹App 只管往里面写数据,
由操作系统负责将内存回写到文件,不必担心 crash 导致数链毕据丢失。
添加依赖:
在 App 启动时初始化 MMKV,设定 MMKV 的根目录
(默认/data/data/xxx/files/mmkv/)
(sp存储在/data/data/xxx/shared_prefs)
初始化方式:
所有变更立马生效,无需调用 sync、apply。
MMKV 会提供一个全局的实例,使用实例:
[img]Android 轻量级存储方案(SharedPreferences、MMKV、Jetpack DataStore)
SharedPreferences使用:
SharedPreferencesImpl#EditorImpl.java 中最终执行了apply()函数:
创建一个awaitCommit的Runnable任务并将其加入到QueuedWork中,该任务内部直接调用了CountDownLatch.await()方法,即直接在UI线程执行等待操作,那么我们看QueuedWork中何时执行这个任务。
QueuedWork.java:
waitToFinish()方法会尝试从Runnable任务队列中取任务,如果有的话直接取出并执行,我们看看哪里调用了waitToFinish():
ActivityThread.java
可以看到在ActivityThread中handleStopActivity、handleStopService方法中都会调用waitToFinish()方法,即在Activity的onStop()中、Service的onStop()中都会先同步等待写入任务完成才会继续执行。指洞
所以apply()虽然是异步写入磁盘,但是如果此时执行到Activity/Service的onStop(),依然可能会阻塞UI线程导致ANR。
Jetpack DataStore 是一种改进的数据存储解决方案,允许您使用 协议缓冲区 存储键值对或类型化对象。
DataStore 使用 Kotlin 协程和 Flow 以异步、一致的事务方式存储数据。并唯亏枯且可以对SP数据进行迁移,旨在取代SP。如果正在使用 SharedPreferences 存储数据,请考虑迁移到 DataStore。
Jetpack DataStore 有两种实现方式:
1.添加依赖项:
2.构建Preferences DataStore:
当我们构建后,会在 /data/data/package name/files/ 下创建名为 preferences_dataStore 的文件如下:
1.构建Preferences DataStore
2.存储的实体类:
3.数据存储/获取:
Activity中:
ViewModel中:
Repository类中:
SP迁移至Preferences DataStore
如果想将项目的SP进行迁移,只需要在Preferences DataStore在构建时配置参数3,如下:
这样构建完成时,SP中的内容也会迁移到Preferences DataStore中了,注意迁移是一次性的,即执行迁移后,SP文件会被删除.
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。
1.添加依赖:
2.Application的onCreate方法中初始化
3.数据存储/获取:
github地址空亮:
Android MMKV - 性能强悍的存储工具(腾讯出品)
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证.
微信作为一个即时通讯项目,需要记录数据比较多.需要频繁的操作记录的数据,需要一个性能强悍的存储组件,他们考察了 SharedPreferences、NSUserDefaults、SQLite 等常见组件,发现都没能满足如此苛刻的性能要求。考虑到这个防 crash 方案最主要的诉求还是实时写入,而 mmap 内存映射文件刚好满足这种需求,就尝试通过它来实现一套 key-value 组件。MMKV 就应运而生了.
重复读写操作 1k 次 MMKV 和 SharedPreferences、SQLite 性能对比( 机型:华为 Mate 20 Pro,版本:Android 10)
注意:
一些 Android 设备(API level 19)在安装/更新 APK 时可能出错, 导致 libmmkv.so 找不到。然后就会遇到 java.lang.UnsatisfiedLinkError 之类的 crash。有个开源库亏数 ReLinker 专门解决这个问题,你可以用它来加载 MMKV
MMKV 是腾讯出品的基于mmap内存映射文件技术的一种数据存储御此的组件,相对于SharedPreferences SQlite 兼容性更好,存读取速度更快.支持常规的各种数据类型.
来都来了,点销拆首个赞再走吧!!!
1.MMKV 文档
2.源码地址
关于androidmmkv和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。