博客
关于我
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/

你可能感兴趣的文章
Python图像处理:从内存加载jpeg
查看>>
python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
查看>>
python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
查看>>
python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
查看>>
python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
查看>>
Python哪个版本最稳定好用2023.10.19
查看>>
Python和黑客技术的渊源
查看>>
Python和RF编写接口自动化
查看>>
Python和RF编写web自动化
查看>>
python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
查看>>
python和java哪个更值得学——来自知乎高赞回答
查看>>
python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
查看>>
python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
查看>>
Python命名中尾随下划线有什么好处?
查看>>
Python启动脚本
查看>>
Python听写汇总结果
查看>>
python吊打Excel?屁!那是你不会用!
查看>>
Python合并两张图片 | 先叠透明度再合并 (附Demo)
查看>>
python各进制的表述与转换
查看>>
python各种库安装
查看>>