SharedPreferences到底会不会被替代,看看最受欢迎的腾讯开源项目——MMKV已成国内开发首选!

发布于 2021-09-13 08:19

/   取代SharedPreferences   /

在Android中需要持久化key-value数据,对于 Android 轻量级存储方案,有很多人都比较熟悉的 原生实现的SharedPreferences,但是由于其设计缺陷可能会带来各种性能问题;也有基于 mmap 的高性能组件 MMKV,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强;还有 Jetpack DataStore 也是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。

而相对于SP而言,MMKV无论是在速度上还是在文件大小上都更具有优势,是一个很方便易用的框架;MMKV在解决SP的各种问题的同时,最大化优化持久化数据的执行效率,能够应对高频的数据操作场景。

接下来我们来将MMKV和SharedPreferences进行读取性能对比:

将MMKV、SharedPreferences 和 SQLite 同步循环写入 1k 条数据,测试结果如下:

官方提供的数据测试结果

可以明显的看出,多进程性能中,MMKV 无论是在写入性能还是读取性能上,都远远超越 MultiProcessSharedPreferences & SQLite & SQLite, 所以说MMKV 在 Android 多进程 key-value 存储组件上是不二之选。

/   SharedPreferences存在哪些问题   /

SharedPreferences 是 Android 中简单易用的轻量级存储方案,可以直接进行数据存储,不必另起线程;不过也带来很多问题,尤其是由SP引起的ANR问题,非常常见。

  • 效率比较低

  • commit、Apply、getXXX()导致的ANR

  • 不能保证类型安全

  • 不能用于跨进程通信

  • 不能保证类型安全

  • ........

两者相比MMKV明显优势:

  • 从 2015 年中至今,在Android 微信上使用已有近 3 年,其性能和稳定性经过了时间的验证。在腾讯内部开源半年之后,得到公司内部团队的广泛应用和一致好评。

  • 高性能,可以支持实时写入

  • 多进程访问

  • 应用便捷性,较好的兼容性;

  • mmap防止数据丢失,提高读写效率;

  • 精简数据,以最少的数据量表示最多的信息,减少数据大小; 

  • 增量更新,避免每次进行相对增量来说大数据量的全量写入。

  • ........

/   谷歌新增Jetpack DataStore   /

而继腾讯开源类似功能的MMKV之后,官方也新增加了一个新 Jetpack 的成员 DataStore,目的就是用来替换饱受诟病的 SharedPreferences,Preferences DataStore 解决了 SP 带来的所有问题。而官方的建议是如果当前使用的是SharedPreferences的话,可以考虑迁移到DataStore,这意思不就是让我们抛弃 SP 来拥抱 DataStore 嘛!

DataStore一共有两种类型,一种是Proto DataStore,一种是Preferences DataStore。

DataStore 相比于 SP 的优点:

  • DataStore 是基于 Flow 实现的,所以保证了在主线程的安全性

  • 以事务方式处理更新数据,事务有四大特性(原子性、一致性、隔离性、持久性)

  • 没有 apply() 和 commit() 等等数据持久的方法

  • 自动完成 SharedPreferences 迁移到 DataStore,保证数据一致性,不会造成数据损坏

  • 可以监听到操作成功或者失败结果

而官方也分析出了 SP 和 DataStore 的区别:

但是对于SharedPreferences和MMKV、Jetpack DataStore,我们仅仅只是了解以上这些就够了吗?

更深入性的细节原理却不得知,比如下面这些灵魂追问你都明白吗?

  • SharedPreferences跨进程怎么操作?

  • SharedPreferences是如何保证线程安全的,内部的实现用到了哪些锁?

  • 为什么SharedPreferences会有这些缺陷,这些缺陷如何改进?

  • 如何实现进程安全的SharedPreferences?

  • SharedPrefernces到底有哪些问题的存在?

  • MMKV和DataStore又是如何解决这些问题的呢?

  • MMKV、DataStore、SharedPreferences 的不同之处?

  • ……

/   快速上手   /

APP 的性能优化之路是永无止境的,今天带大家学习腾讯开源用于提升本地存储效率的轻量级存储框架——MMKV,和官方新增的Jetpack DataStore 数据存储解决方案。

想要解除上面那些潜藏在内心最深处的困惑, 就不得不站在SP原理的基础上,分别比较MMKV和DataStore分别解决了SP的哪些问题?而MMKV与DataStore又有什么区别?在项目中该怎么选择?

为了帮助大家更深入的学习和掌握MMKV和Jetpack DataStore的核心原理。这里我们特邀腾讯课堂的 前爱奇艺高级架构师-Lance老师9月14日-9月15日 为大家带来连续两天《Android轻量级数据持久化训练营》直播分享。用两节课的时间深度剖析并结合实战给大家详细的讲解这些核心原理,让你彻底掌握MMKV原理和Jetpack DataStore使用方法,收获一段高效的成长!

9月14日 -9月15日,每晚20:00-22:00

前爱奇艺高级架构师的【Lance老师】

倾心打造

原价 ¥199,限时 免费 立刻学习!

【直播+录播】【笔记课件】+【源码】

仅前 300 人有效,先到先得!

/   为什么推荐学这门课?   /

SharedPrefernces到底有哪些问题的存在?MMKV和DataStore又是如何解决这些问题的呢?我们的学习不仅仅只是掌握其API的调用,更希望能够通过了解SP的实现原理,从而避免我们自实现的代码中出现类似问题。同时掌握MMKV与DataStore原理,学习其优秀的设计,将其中运用的知识点能够引入到项目的各种需求中解决问题。

9月14日-9月15日,2天时间,Lance老师带领大家结合核心原理带你快速掌握MMKV和DataStore。帮你体系的梳理源码的学习路线,以及高效的学习方法,并且结合实战来带你分析相关高频面试问题。

/   大厂名师手把手教学   /

听课后,还能获取互联网环境中,Andorid核心技术路线图,里面的内容和方向,让你学习起来更明确,更体系。

内部独家教材:

①《Android程序性能优化及项目实战》

有了这份学习笔记,可以帮助大家对APP的性能优化有更系统和更加深入的理解。

②《Android网络传输与数据存储优化》:

还为大家准备了超级干货内部教材~

参加直播听课还有机会获得《Android架构开发手册》:

2天时间,你将获得:

前爱奇艺高级架构师结合自身实战案例倾情授课

1. 解决SharedPrefernces缺陷和深入微信MMKV核心原理

2. Jetpack DataStore的使用与源码分析

/   独创实战特训营服务   /

课堂福利:

1. 限时0元秒送性能优化系列课程

2. 提供学习直播+预习资料+源码+老师课后答疑

3. 赠送课程学习资料

课程录播课程(可永久观看)

【直播+录播】 +【课中分享所有资料】

仅前 300 人有效,先到先得!

最后直播学习中加赠-【2021最新整理Android大厂面试解析】:

推荐阅读:
我的新书,《第一行代码 第3版》已出版!
新版Glance发布,更好用的Android数据库调试助手
PermissionX 1.5发布,支持申请Android特殊权限啦

本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材