博客
关于我
Android 轻量级存储方案的前世今生
阅读量:75 次
发布时间:2019-02-26

本文共 1371 字,大约阅读时间需要 4 分钟。

MMKV与SharedPreferences与DataStore的对比分析

在Android应用开发中,数据存储方案的选择至关重要。本文将从SharedPreferences、MMKV以及Jetpack DataStore的角度,分析它们的特点、优缺点及适用场景。

一、SharedPreferences

SharedPreferences是Android中最常用的轻量级数据存储方案,通过键值对形式存储数据。其本质是一个XML文件,文件路径位于/data/data/包名/shared_prefs。数据以XML格式存储,每次读取时需解析文件获取指定键的值。

1.1 内存占用问题SharedPreferences通过sSharedPrefsCache缓存所有SharedPreferences实例,导致已使用的SP实例始终驻留于内存中。大量数据存储可能导致内存占用过高。

1.2 线程安全通过锁机制保证线程安全,但在多进程场景下不可靠。

1.3 ANR风险在主线程等待子线程加载数据时,可能引发ANR问题。Android 8.0及以后版本优化后ANR风险显著降低。

二、MMKV

MMKV是腾讯开发的一款基于mmap内存映射的高性能键值组件,采用Protobuf序列化方式,性能稳定,支持多进程。

2.1 使用特点

  • 支持多进程访问,适合跨进程场景。
  • 数据实时写入,性能优于SharedPreferences。
  • 底层采用mmap技术,内存操作直接对应磁盘写入,减少IO等待。

2.2 核心优势

  • 跨进程支持:MMKV文件直接映射到各进程内存,避免数据同步问题。
  • 增量更新机制:支持对同一键值进行多次修改,仅最后一次生效。
  • Protobuf序列化:数据体积小,读写速度快。

三、DataStore

Jetpack DataStore是Android Jetpack的数据存储解决方案,支持键值对和类型化数据存储,基于Kotlin协程和Flow实现异步一致性事务。

3.1 功能对比

  • Preferences DataStore:键值对存储,与SharedPreferences类似,支持简单数据类型。
  • Proto DataStore:存储自定义数据类型,基于Protocol Buffers协议,类型安全。

3.2 优点

  • 异步操作支持:读写操作无需等待完成。
  • 数据一致性:基于Flow实现异步事务,保证数据一致性。
  • 可监听:支持对数据变化进行监听。

三、适用场景

  • SharedPreferences适合简单的键值对存储,注重快速读写。
  • MMKV适合多进程场景,需要实时写入的高性能存储。
  • DataStore适合复杂数据存储,需要一致性和异步操作的场景。

四、性能对比

  • 在单进程场景下,SharedPreferences读写速度较快,而MMKV在多进程场景下表现更优。
  • DataStore的读写速度约为SharedPreferences的两倍,Proto DataStore适合复杂对象存储。

五、总结

SharedPreferences、MMKV和DataStore各有优势。SharedPreferences简单易用,适合大部分场景;MMKV在跨进程和性能上更胜一筹;DataStore功能强大,支持异步和一致性操作。根据具体需求选择合适的方案。

转载地址:http://gar.baihongyu.com/

你可能感兴趣的文章
PHP7安装pdo_mysql扩展
查看>>
PHP7实战开发简单CMS内容管理系统(7) 后台登录架构 用户登录校验
查看>>
php7,从phpExcel升级到PhpSpreadsheet
查看>>
PHP8中match新语句的操作方法
查看>>
PHP:第一章——PHP中常量和预定义常量
查看>>
PHP:第一章——PHP中的位运算
查看>>
phpcms
查看>>
phpcms 2008 product.php pagesize参数代码注射漏洞
查看>>
phpcms V9 自定义添加 全局变量{DIY_PATH}方法
查看>>
Redis五种核心数据结构的基本使用与应用场景
查看>>
PHPCMS多文件上传和上传数量限制
查看>>
phpEnv的PHP集成环境
查看>>
PHPExcel一些基本设置总结
查看>>
PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/c...
查看>>
PHPMailer发送邮件
查看>>
phpmailer发送邮件,可以带附件
查看>>
phpmyadmin 安装
查看>>
phpmyadmin数据库建表及插入
查看>>
phprpc简单使用
查看>>
phpstorm中Xdebug的使用
查看>>