Android开发-存储框架技术总结 - 教程

news/2025/10/1 9:11:50/文章来源:https://www.cnblogs.com/wzzkaifa/p/19122096

一、MMKV模块

MMKV 之所以成为 SharedPreferences 的优质替代方案,主要在于其在多个维度的显著优势。首先,在性能上,MMKV 底层技术采用了内存映射(mmap)技术,将文件直接映射到内存,使得数据读写操作直接在内存中完成,并由操作系统异步刷盘,从而彻底避免了传统 SharedPreferences 同步 I/O 带来的主线程阻塞问题。这使得 MMKV 的读写速度比 SharedPreferences 快数百倍,有效解决了应用卡顿和 ANR(应用无响应)的痛点。

其次,在多进程环境下,MMKV 提供了可靠的数据一致性保障。它通过 Linux 内核级的 flock() 原子锁机制来管理读写,有效避免了多进程并发操作可能导致的数据错乱。同时,MMKV 利用匿名共享内存传输数据,实现了无需序列化的跨进程通信,大大提升了数据同步的效率和安全性。

此外,MMKV 在数据格式内存管理上也进行了深度优化。它使用Protobuf 二进制编码,不仅数据体积更小,序列化与反序列化速度也更快,且静态类型系统从编译期就确保了类型安全。在内存管理方面,MMKV 内置了 LRU 缓存机制,能够智能地释放不常用的内存,并使用弱引用避免了 Activity 内存泄漏,确保了应用运行的稳定性。

最后,MMKV 在易用性功能扩展方面也表现出色。它提供了便捷的一键迁移工具,帮助开发者平滑地从 SharedPreferences 切换。同时,内置的AES 加密功能、事务性批量写入以及对 Parcelable 对象的直接支持,都极大地简化了开发工作,并满足了高安全性与高效率的开发需求。总而言之,MMKV 依据底层技术的革新,全面超越了 SharedPreferences,成为现代 Android 应用数据存储的理想选择。

二、UniKV模块

UniKV 是一种基于SQLite的键值对存储方案,它旨在处理传统 SharedPreferences 在数据一致性和多进程并发方面的痛点。UniKV 的核心优势在于它充分利用了 SQLite 数据库的强大能力,将所有数据存储在一个 SQLite 表中。这使得 UniKV 能够获得ACID事务协助,确保即使在应用崩溃或多进程同时写入的极端情况下,资料也能保持完整和一致,有用避免了材料损坏和错乱。

在具体达成上,UniKV 借鉴了 SQLite 的文件锁机制来保障多进程安全,确保任何时候都只有一个进程能对数据库进行写入操作,从而杜绝了数据竞争问题。同时,为了提升性能,UniKV 在内存中引入了LRU 缓存,优先从内存中读取数据,只有在缓存未命中时才访问磁盘,并通过批量提交事务来减少写入次数,实现了在保证高可靠性的同时兼顾了读写效率

三、内存映射挑战

在进程间利用共享内存进行通信时,数据从进程A传递到进程B通常只发生一次数据拷贝。这是因为共享内存的实现机制是,操作系统将同一块物理内存区域映射到两个进程的虚拟地址空间,进程A将材料写入这块共享内存,进程B能够直接从这块物理内存读取,避免了数据在内核和用户空间之间来回复制。

这种内存映射机制是借助操作系统的虚拟内存管理实现的,通过页表将虚拟地址映射到物理地址,从而允许不同的进程访问同一块物理内存。从Android工程师的角度看,共享内存通信主要借助Binder机制在底层实现,常用的机制是Ashmem (Android Shared Memory),它是一种针对Android优化的匿名共享内存,常用于MediaCodec等框架中,用于高效传递大块数据,以减少不必要的数据拷贝。

Ashmem 的工作流程行概括为:一个进程(例如进程 A)最初在内核中创建一块Ashmem共享内存区域,并获得一个特殊的文件描述符。接着,进程 A 将需要传输的信息写入这块共享内存。接下来,它通过Binder 机制,将这个文件描述符作为 IPC 参数传递给另一个进程(进程 B)。进程 B 接收到文件描述符后,调用 mmap() 系统调用将这块共享内存映射到自己的虚拟地址空间。至此,两个进程都拥有了对同一块物理内存的直接访问权限,从而实现了高效的数据共享,完全避免了在进程间进行大块数据的拷贝。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内网站模板郑州纯手工seo

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发 1990年11月,美国先进制造研究中心AMR(Advanced Manufacturing Research)就提出了MES&#…

TensorFlow 详细安装指南与常见问题解决方案 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MySQL 8 密码验证组件(validate_password)

MySQL 8 密码验证组件(validate_password)在数据库安全体系中,“弱密码” 是最易被突破的防线之一。MySQL 8 引入的 validate_password 组件,通过标准化的密码强度检测与策略管控,从源头杜绝弱密码风险 —— 它替…

搜索引擎网站分析深圳龙霸网站建设物三

bash知识点:文件测试(测试文件是否存在,文件是某种类型)单目测试-e file:测试文件是是否存在-a file:测试文件是是否存在-f file:测试是否为普通文件,是为真,否则为假-d file:测试是…

平东网站建设php网站备份

前言 创建型为了创建东西才是有用的,创建型设计模式使用的场景: 1、创建一个东西; 2、可重复利用; 3、灵活性高,代码可因地制宜。 Factory Method(工厂模式) 工厂模式将目的将创建对象的具体过程屏蔽隔离起来&#…

react用于网站开发仿煎蛋wordpress

添加swap交换分区SWAP即交换分区是一种类似于Windows系统虚拟内存的功能,将一部分硬盘空间虚拟成内存来使用,从而解决内存容量不足的情况,因为SWAP毕竟是用硬盘资源虚拟的,所以速度上比真实物理内存要慢很多,一般只有当…

完整教程:C++设计模式之结构型模式:适配器模式(Adapter)

完整教程:C++设计模式之结构型模式:适配器模式(Adapter)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

第三方应用测试:【移动应用后端API自动化测试:Postman与Newman的集成】 - 指南

第三方应用测试:【移动应用后端API自动化测试:Postman与Newman的集成】 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

(附源码)基于Spring Boot的宿舍管理系统设计与建立0007

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:【项目】Vision Master OpenCV 3.0 版本(预)发行说明

深入解析:【项目】Vision Master OpenCV 3.0 版本(预)发行说明pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

Adobe Acrobat Pro DC 2025版破解版下载及安装使用教程

Adobe Acrobat Pro DC 2025版破解版下载及安装使用教程Adobe Acrobat Pro DC 2025是一款功能强大的PDF文档编辑和管理工具。这款软件内置了多种编辑和修复工具,能够帮助用户方便地创建、编辑、转换和共享PDF文档。不仅…

网页访问速度很慢,远程仓库调用很慢

访问测试一下IPv6 测试 ipv6失败就去 搜索——>控制面板——>网络与internet——>网络和共享中心——>修改设配器设置——>右击那个WLAN——>属性——>把下面那个ipv6协议关了——>确认然后没…

免费网站推广工具浙江平安建设信息系统网站

前言 在持续集成/持续部署(CI/CD)的旅途中,Jenkins与版本控制系统的紧密集成是不可或缺的一环。本篇“持续集成03--Jenkins结合Gitee创建项目”将引导如何将Jenkins与Gitee(一个流行的Git代码托管平台)相结合&#xff…

详细介绍:Day51 时钟系统与定时器(EPIT/GPT)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

郑州惠济区建设局网站删除wordpress logo

一、虚拟机简介 1、Java 虚拟机 (1) 虚拟机: 虚拟机(Virtual Machine)是一种软件或硬件实体,它模拟了一个独立的计算环境,可以在其上运行应用程序。 虚拟机可分为系统虚拟机和程序虚拟机: ● 系统虚拟…

网站推广效果的评价指标有网页游戏哪个平台最好

还在担心网购服装对实际穿着效果没把握吗?随着京东App 6.6.3版本的更新,京东试试3D虚拟试衣功能正式上线,消费者可按照自己的身材比例创建专属的3D模型,而试穿效果则可以完全依照模型来展现。据了解,这个系统未来还将实…

网站开发敬请期待dw软件代码大全

阅读导航 引言一、线程池简单介绍二、Linux下线程池代码⭕Makefile文件⭕ . h 头文件✅Task.hpp✅thread.hpp✅threadPool.hpp ⭕ . cpp 文件✅testMain.cpp 三、线程池的优点温馨提示 引言 在Linux下,线程池是一种常见的并发编程模型,它能够有效地管理…

网站建设用图工作室网站建设的意义

时间限制 :1000 ms 内存限制:65536 KB 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位…

网页设计公司建网站网站设计南充建设工程信息网

如果你是一个硬件系统管理员或者Linux工程师,你可能会记得大多数Linux命令行技巧。下面的这些Linux命令行技巧通常不被Linux用户所使用。 1.使用pgrep快速查找一个PID pgrep遍历目前正在运行的进程然后列出符合查找规则的进程ID(PID)。 pg…