androidmmkv的简单介绍

本篇文章给大家谈谈androidmmkv,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表