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

你可能感兴趣的文章
opencv9-膨胀和腐蚀
查看>>
OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
查看>>
OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
查看>>
OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
查看>>
OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
查看>>
OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
查看>>
OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
查看>>
OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
查看>>
OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
查看>>
OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
查看>>
OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>
opencv保存图片路径包含中文乱码解决方案
查看>>
opencv图像分割2-GMM
查看>>
OpenCV学习(13) 细化算法(1)(转)
查看>>
OpenCV(1)读写图像
查看>>
OpenCV:概念、历史、应用场景示例、核心模块、安装配置
查看>>
openlayers 入门教程(八):Geoms 篇
查看>>