Android - 键值对存储 SharedPreference、DataStore、MMKV

MMKV:轻巧高效的跨平台键值存储解决方案 MMKV(Meituan Mapped Key-Value)是一款由微信团队开发的高性能、跨平台的键值存储库,旨在解决移动应用数据存储中的效率和性能问题。MMKV作为一种高性能的跨平台键值存储解决方案,具备许多优势和适用场景。高性能特点:MMKV具有卓越的读写性能,比传统的数据存储方式(如SharedPreferences)更快速有效。它采用了底层的mmap技术和序列化算法优化,以实现更高的读写速度和更低的内存占用。适用场景:MMKV特别适用于移动应用开发中需要频繁进行大量数据读写的场景。 阅读详情

一、概念

以键值对的方式保存少量的数据,通常用来存数程序的一些配置信息,如是否打开音效、是否使用震动效果、窗口状态、是否进入过向导界面等。

二、SharedPreference

  • 路径:data/data/包名/shared_prefs。
  • 三种获取方式:
    • Context类中的getSharedPreferences()。
    • Activity类中的getPreferences(),自动将当前Activity类名作为SP的文件名。
    • PreferenceManager类中的getDefaultSharedPreferences(),自动将当前应用程序包名作为前缀来命名SP文件。
  • commit()和apply()的区别:commit是同步的,会等待写入磁盘后再返回,而apply是异步的,在调用写磁盘操作后就直接返回了,但是这时候可能磁盘中数据还没有被修改。如果关心存入结果则使用commit如果不关心存入结果则使用apply。
//获取SP
val sp = getSharedPreferences("data", MODE_PRIVATE)    

//写入数据
val editor = sp.edit()    //操作数据要通过编辑器
editor.putString("name", "Tom")    //写入数据
editor.putInt("age", 28)
editor.apply()    //一定要提交

//KTX写法(默认为apply,或edit中传入true换成commit)
sp.edit(true) {
    putInt("num",123)
}

//读取数据
val name = sp.getString("name", "")    //第二个参数为没读取到数据的默认值

三、DataStore

详见

四、MMKV

Android 数据存储详细介绍涉及相关键值对、数据库、存储卡、应用组件Application、共享数据 Android提供了多种数据存储方式来满足不同的需求。以下将详细介绍键值对存储(SharedPreferences)、数据库存储(SQLite)、存储卡(External Storage)、应用组件(Application Class)和共享数据(Content Provider)的使用方法及其适用场景。 阅读详情

相关推荐

【Android面试八股文】Android 有哪些存储数据的方式?

SQLite是Android平台上的内置关系型数据库管理系统,适合存储结构化数据。MMKV 是一个高性能、低内存占用的 key-value 存储框架,特别适合移动应用中的数据持久化需求。Firebase提供了实时数据库和Firestore,这两者都是云托管的NoSQL数据库,适合实时数据同步和在线数据存储。在Android平台上,有多种方式可以存储数据,每种方式都适合不同类型的数据和使用场景。ObjectBox是另一个轻量级的对象存储解决方案,它提供了快速的对象存储和查询功能。

字节卷动 422

关于Android键值对存储的方案选择

关于Android键值对存储的方案选择

SurpassLi的博客 1858

Android存取键值对的代码例子

Android存取键值对的代码例子。通过利用SharedPreferences和Properties两种方式,演示了如何实现键值对保存和读取的功能。

Android Studio 学习记录-键值对

本文介绍Android的键值对存储方式的使用方法,包括:如何将数据保存到共享参数,如何从共享参数读取数据,如何使用共享参数实现登录页面的记住密码功能,如何使用Jetpack集成的数据仓库。

demon_dog的博客 984

用deepseek部署全自动的机器人--bytebot

Bytebot是一款开源AI桌面代理,提供完整的虚拟桌面环境,支持跨应用任务处理、文件管理、文档处理等复杂工作流。其技术架构包含核心控制、LLM代理、UI等组件,支持Docker和Kubernetes部署。本文演示了基于CloudStudio的部署流程,包括环境配置、Docker部署及DeepSeek API集成,实现多模型调用功能。

Kin 2481

保姆级教程:在Ubuntu 22.04上用Conda搞定nuPlan数据集环境(Python 3.9 + PyTorch)

本文提供了一份详细的Ubuntu 22.04环境下使用Conda配置nuPlan自动驾驶数据集的保姆级教程,涵盖Python 3.9安装、Conda环境管理、PyTorch配置及数据集可视化验证等关键步骤,帮助开发者高效搭建开发环境。

weixin_29061997的博客 254

Android应用:SharedPreferences、MMKV和DataStore怎么选

SharedPreferences、MMKV和DataStore

weixin_42277946的博客 1577

强化学习-----DQN(Deep Q-network)

DQN(Deep Q-Network)是一种基于深度学习和强化学习的算法,由DeepMind提出,用于解决离散动作空间下的马尔科夫决策过程(MDP)问题。它是首个成功将深度学习应用于解决强化学习任务的算法之一。DQN,即深度Q网络(Deep Q-network),是指基于深度学习的Q-Learing算法。那什么是Q-leaning?可以看上一篇文章Q-learning是一种经典的强化学习算法,用于解决马尔可夫决策过程(Markov Decision Process,MDP)中的控制问题。

qq_74722169的博客 2万+

【面试黑洞】Android 的键值对存储有没有最优解?

视频先行下面是视频内容的脚本整理稿。如果你看了视频,那下面的文稿就不用看了。正文这是我在网上找到的一份 Android 键值对存储方案的性能测试对比(数越小越好):可以看出,DataStore 的性能比 MMKV 差了一大截。MMKV 是腾讯在 2018 年推出的,而 DataStore 是 Android 官方在 2020 年推出的,并且它的正式版在 2021 年 8 ...

HenCoder 635

UE5 Metahuman与Blender手动绑定:ARKit面部动画实战对比

面部动画是角色动画领域的核心技术,其核心原理在于通过驱动面部骨骼或混合形状来模拟真实肌肉运动,从而赋予数字角色生命力。这项技术的价值在于极大地提升了虚拟角色的表现力与沉浸感,广泛应用于游戏开发、影视制作、虚拟现实和实时交互应用。在技术实现路径上,开发者常面临工业化集成方案与高度自定义方案的选择。本文聚焦于使用行业标准的ARKit 52个面部混合形状数据,深度对比了虚幻引擎Metahuman的工业化流程与Blender手动绑定方案在视觉保真度、工作流效率、性能开销和扩展性上的差异,为不同项目规模与技术需求的团

weixin_33901926的博客 449

思科路由器IPv6各种路由协议配置

思科路由器IPv6路由协议配置:1、静态路由配置;2、默认路由配置;3、RIPng路由配置;4、OSPFv3路由配置。

weixin_41687096的博客 6543

Android DataStore

然后,有个框架叫,MMKV是微信的开源库,它可以实现SP的功能,并且可以支持多进程写入,并且同步写入不会影响性能导致ANR。而协程本身是一个线程框架,可以用同步代码实现异步操作,然后异步完成后帮我们切回主线程。DataStore是SharedPreference(简称SP)替代产品。所以我们就可以再保存完数据后执行相应操作。主要作用解决SP偶尔出现ANR问题。DataStore是结合协程来使用的。...

腾飞的博客 1814

速腾R128雷达+海康全景相机ROS数据采集避坑实录:从‘雷达不转’到MATLAB标定的完整流程

本文详细记录了速腾R128激光雷达与海康威视全景相机在ROS环境下的数据采集与MATLAB标定全流程。从硬件配置的常见陷阱(如雷达旋转参数设置)、驱动编译的依赖管理,到多传感器同步的实战技巧和MATLAB标定方法,提供了完整的避坑指南和技术方案。特别针对RoboSense R128雷达和海康相机的特殊需求给出了具体解决方案。

weixin_28717807的博客 1218

键值存储方式对比

本文从一个较为粗糙的角度对几种键值存储方式进行可对比

q1575825411的博客 1959

保研考研机试攻略:第一章——从零开始

🧊保研考研机试攻略:第一章——从零开始

qq_63349644的博客 1321

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android - 数据持久化存储

以键值对的方式保存少量的数据,通常用来存数程序的一些配置信息,如是否打开音效、是否使用震动效果、窗口状态、是否进入过向导界面等。

HugMua的博客 1471

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

这是一篇你应该了解的Android数据存储优化

前言 年前在公司做了从 SharedPreferences 到 MMKV 的迁移,所以借这次机会和大家讨论一下Android存储优化。 我们为什么要去做存储优化?归根到底,还是 SharedPreferences 不太给力: 增量更新导致文件写入的时间长。 线程安全问题和潜在的ANR。 不能跨进程,不过跨进程的使用场景还真不多! 除了 SharedPreferences,我们还可以选择哪些本地存储方式呢? 别说,还挺多,有DataStore、MMKV和数据库。 一、介绍 上面说了四种本地..

Androidbye的博客 345

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android 数据存储(二)-SP VS DataStore VS MMKV

不同于文件的存储方式,如果要保存的键值集合相对较小,则应使用SharedReferences API。SharedReferences对象指向一个包含键值对的文件,并提供简单的读写方法。 本文从SharedReferences开始逐步引入Preference、MMKV。

帅次的博客 4149

Android几种数据存储的对比(MMKV、DataStore、SharedPreference)

Jetpack DataStore 是一种改进的新数据存储解决方案,允许使用协议缓冲区存储键值对或类型化对象。DataStore 以异步、一致的事务方式存储数据,克服了 SharedPreferences(以下统称为SP)的一些缺点。DataStore基于Kotlin协程和Flow实现,并且可以对SP数据进行迁移,旨在取代SP。MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。

张雨的博客 3027

替代 SharedPreference 的最佳键值对存储方案:MMKV

摘要 MMKV是腾讯开源的高性能键值存储组件,专为替代Android的SharedPreferences设计。其核心优势包括:1)基于mmap内存映射和Protobuf序列化,实现极速读写(比SP快2050倍);2)原生支持多进程安全访问;3)支持增量更新和AES加密。相比SP和Google的DataStore,MMKV在性能、安全性和易用性方面全面领先,成为移动端存储的最佳选择。使用方法与SP类似,支持多种数据类型存储,并提供了多进程、数据加密等高级功能。

fxjzzyo的博客 695

Android 轻量级存储方案的前世今生【SharedPreferences、MMKV、Jetpack DataStore】

背景 对于 Android 轻量级存储方案,有大多数人都很熟悉的 SharedPreferences;也有基于 mmap 的高性能组件 MMKV,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强;还有 Jetpack DataStore 是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore 使用 Kotlin 协程和流程(Flow)以异步、一致的事务方式存储数据。本文将一一分析这三个方案的来龙去脉,并深入源码进行分析。(本文基于Android 29 源码

博艺的技术专栏 1197

Android Jetpack系列--8. DataStore使用详解

SharedPreferences 和 DataStore 对比 SharedPreferences: 可能阻塞UI线程,导致ANR异常(需要等等sp文件加载完成,而且存储数据越多,文件越大,加载越慢,所有我们之前使用时都会分类存储在不同的sp文件中,如用户信息,业务信息,统计信息等)且不能用于跨进程通信 // ContextImpl.getSharedPreferences() public SharedPreferences getSharedPreferences(File file, int m

o118abcdef的博客 3513

Android DataStore:安全存储和轻松管理数据

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。干货主要有:①1000+CTF历届题库(主流和经典的应该都有了)②CTF技术文档(最全中文版)③项目源码(四五十个有趣且经典的练手项目及源码)

qq_44005305的博客 1265

Android性能优化- 从SharedPreferences到MMKV

从SharedPreferences到MMKV

hirezy 1498
上一篇: Android - 运行时权限 PermissionX
下一篇: Android - 文件存储
Jomurphys
博客等级 码龄9年 1768粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值