Android MMKV

这篇具有很好参考价值的文章主要介绍了Android MMKV。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.MMKV

对于经常使用的快速本地化存储,Android中往往会选择SharedPreferences来作为存储方式。SharePreferences作为Android库中自带的存储方式,在使用方式上很便捷,但是往往存在以下一些问题。

①线程阻塞:通过getSharedPreferences可以获取SP实例,从首次初始化到读到数据会存在延迟,因为读文件的操作阻塞调用的线程 直到文件读取完毕。如果在主线程调用可能会对UI流畅度造成影响。

②文件跨进程共享问题:SharedPreferences虽然支持设置MODE_MULTI_PROCESS标志位,但是跨进程共享SP存在很多问题,所以不建议使用该模式。

③二次写入:将数据写入文件需要将数据拷贝两次再写入到文件中,如果数据量过大,也会有很大的性能损耗。

MMKV解决了SharedPreferences的以上问题,MMKV是基于mmap内存映射的移动端通用key-value组件,相对于SP而言,MMKV无论是在速度上还是在文件大小上都更具有优势,是一个很方便易用的框架。

MMKV存储支持以下Java语言基础类型:boolean、int、long、float、double、byte[]、String、Set<String>、任何实现了Parcelable的类型。MMKV中对象存储方式是转化成json串,通过字符串存储,使用的时候再取出来反序列化。

 文章来源地址https://www.toymoban.com/news/detail-457481.html

MMKV存储的优势:

①非常高效:MMKV使用mmap与文件保持内存同步,由操作系统负责将内存回写到文件,不必担心crash导致数据丢失。使用protobuf对数值进行编码/解码,充分利用Android,实现最佳性能。

②多进程并发:MMKV支持进程之间的并发读写访问。

③易于使用:可以随时使用MMKV。所有的更改都会立即保存,不需要同步,也不需要apply调用。

④少数几个文件(小):MMKV包含进程锁、编码/解码帮助程序和mmap逻辑等,很整洁。

MMMKV无论是在写入性能还是在读取性能,都远远超越SharedPreferences和SQLite,尤其是在Android多进程key-value存储组件上MMKV是不二之选。

 

2.MMKV使用方法

①引入依赖

在build.gradle文件中加入

implementation 'com.tencent:mmkv-static:1.2.10'

②在Application中初始化

MMKV.initialize(this);

MMKV 默认把文件存放在$(FilesDir)/mmkv/目录。也可以在 MMKV初始化时自定义根目录:

String dir = getFilesDir().getAbsolutePath() + "/mmkv";

String rootDir = MMKV.initialize(dir);

③MMKV对象获取

MMKV提供一个全局的实例,可以直接使用。

//1. 获取默认全局实例 (一般就使用这个就行)

MMKV kv = MMKV.defaultMMKV();

//2. 也可以自定义MMKV对象,设置自定ID (根据业务区分的存取实例)

MMKV kv = MMKV.mmkvWithID("ID");

//3. MMKV默认是支持单进程的,如果业务需要多进程访问,需要在初始化的时候添加多进程模式参数

MMKV kv = MMKV.mmkvWithID("ID", MMKV.MULTI_PROCESS_MODE); //多进程同步支持

④存取方法

添加/更新数据:

kv.encode("bool", true); //存boolean

kv.encode("int", Integer.MIN_VALUE); //存int

kv.encode("string", "MyiSMMKV"); //存string

获取数据:

boolean bValue = kv.decodeBool("bool"); //获取boolean

int iValue = kv.decodeInt("int"); //获取int

String str = kv.decodeString("string"); //获取string

删除数据:

mmkv.removeValueForKey(key);

如果需要存取对象,可以用存取对象json字符串的方法,将对象转成json存,取出json转回对象。

 

3.SharedPreferences迁移

MMKV提供了importFromSharedPreferences()方法进行SP的数据迁移。

MMKV还额外实现了SharedPreferences、SharedPreferences.Editor这两个接口,在迁移的时候只需两三行代码即可,其他CRUD操作代码都不用改。

MMKV kv = MMKV.mmkvWithID("myData");

SharedPreferences olderData = App.getInstance().getSharedPreferences("myData", MODE_PRIVATE);

kv.importFromSharedPreferences(olderData);

olderData.edit().clear().apply();

 

到了这里,关于Android MMKV的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 对于Android开发,我们为何要学Jetpack Compose?

    Jetpack Compose 是用于构建原生 Android 界面的新工具包。它可简化并加快 Android 上的界面开发,使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。Compose 使用全新的组件——可组合项 (Composable) 来布局界面,使用修饰符 (Modifier) 来配置可组合项。 为何Jetp

    2024年02月10日
    浏览(50)
  • Flutter层对于Android 13存储权限的适配问题

    感觉很久没有写博客了,不对,的确是很久没有写博客了。原因我不怎么想说,玩物丧志了。后面渐渐要恢复之前的写作节奏。今天来聊聊我最近遇到的一个问题: Android 13版本对于storage权限的控制问题。 我们都知道,Android的每个版本更新都会伴随着搞事,也就是所谓的谷

    2024年02月07日
    浏览(39)
  • Hugging Face 的 Transformers 库快速入门 (一)开箱即用的 pipelines

    注:本系列教程仅供学习使用, 由原作者授权, 均转载自小昇的博客 。 Transformers 是由 Hugging Face 开发的一个 NLP 包,支持加载目前绝大部分的预训练模型。随着 BERT、GPT 等大规模语言模型的兴起,越来越多的公司和研究者采用 Transformers 库来构建 NLP 应用,因此熟悉 Transformer

    2023年04月27日
    浏览(48)
  • uniapp对于android和ios退出app的方法

    当涉及到在 UniApp 中实现 Android 和 iOS 平台上退出应用程序的功能时,可以根据操作系统的不同使用不同的方法。下面是一篇详细的图文博客,介绍了如何在 UniApp 中实现 Android 和 iOS 的退出应用程序功能。 UniApp 提供了跨平台开发的能力,同时也支持原生应用程序的退出功能。

    2024年02月09日
    浏览(40)
  • 如何基于 Apache Doris 与 Apache Flink 快速构建极速易用的实时数仓

    随着大数据应用的不断深入,企业不再满足离线数据加工计算的时效,实时数据需求已成为数据应用新常态。伴随着实时分析需求的不断膨胀,传统的数据架构面临的成本高、实时性无法保证、组件繁冗、运维难度高等问题日益凸显。为了适应业务快速迭代的特点,帮助企业

    2024年02月12日
    浏览(45)
  • 腾讯数据持久化方案MMKV原理分析

    提到数据持久化存储的方案,Android提供的手段有很多,在项目中常用的就是SharedPreference(简称SP),但是SP使用虽然简单,但是存在缺陷: 写入速度慢,尤其在主线程频繁执行写入操作易导致卡顿或者ANR; 不支持跨进程 因此针对这种缺陷,我们往往会换其他的技术方案,例如

    2024年02月07日
    浏览(36)
  • Remix本地化,加载本地合约文件,本地链接Remix

    智能合约IDE,在线的比较卡,而且切换网络面临文件丢失的风险,选择本地搭建Solidity本地编辑环境,Remix-IDE + Remixd组合,加载本地合约代码。这里用到两个工具: Remix IDE(本地IDE)+ Remixd (链接) Remix IDE 项目源码:https://github.com/ethereum/remix-project 介绍: Remix IDE是一个本地部署运

    2024年02月13日
    浏览(58)
  • 详解dedecms织梦远程图片本地化https链接图片无法本地化怎么解决

    最近有朋友遇到发布文章时候文章里面带https的站外图片无法本地化,以下是解决办法: 找到  dede//inc/inc_archives_functions.php文件里面GetCurContent($body)这个函数,里面 这一段改为: 第二步: 这一段改为: 搞定,这样发文章就可以把https的远程图片也本地化了 以上就是本文的全

    2024年02月02日
    浏览(38)
  • 本地化GPT:LangChain + ChatGLM == 知识本地库

    OpenAI发布的ChatGPT Plugin刚刚杀死了一个创业公司LangChain(刚获得1000万美金种子轮融资) 由于语言模型的输出是通过自回归+采样[可选]完成的,在高精度场景下,即使是超大语言模型,发生错误概率也是指数级的。同时,采样也很容易引入错误。比如地址中的数字门牌号,模型

    2024年02月11日
    浏览(46)
  • Excalidraw本地化部署

    1 - Excalidraw介绍 Excalidraw是一个开源、小巧易用的手写风格的框图画板软件。 ​excalidraw官网地址:https://excalidraw.com/​ 2 - Excalidraw本地化安装(git方式) 2-1安装部署 在terminal中,输入: 安装完成后,在terminal中,进入项目文件 2-2 安装依赖环境 - nodeJS NodeJS下载地址: nodejs下载

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包