首页 > 其他分享 >SharedPreferences 和 MMKV 是何方神圣

SharedPreferences 和 MMKV 是何方神圣

时间:2024-07-20 11:28:40浏览次数:16  
标签:文件 存储 何方神圣 MMKV 内存 SharedPreferences 序列化 数据

一、概述
SharedPreferences 和 MMKV 都是Android平台保存本地数据的工具,用于保存一些常用配置。

二、SharedPreferences
1.类似Map集合,将Key-Value对存储于硬盘上的XML文件,以XML文件的形式保存在/data/data/包名/shared_prefs目录下。数据较多时会有性能问题。
2.SharedPreferences适用于简单数据的存储,对于复杂且相互间有关的数据,则更适合保存在数据库。
3.支持基本数据类型和StringSet类型数据的存储。
4.SharedPreferences保存在APP内部,当手动清除应用数据时,保存的数据会被清除掉。
5.类似于Windows系统上的ini配置文件,但具有权限设置:Context.MODE_PRIVATE(只能被本应用访问),Context.MODE_APPEND(追加模式),Context.MODE_WORLD_READABLE(其他应用可读),Context.MODE_WORLD_WRITEABLE(其他应用可写)。
6.ContextImpl 记录着 SharedPreferences的重要数据、文件路径和实例的键值对。
7.在 XML 文件全部内加载到内存中之前,读取操作是阻塞的。在 XML 文件全部内加载到内存中之后,是直接读取内存中的数据。
8.apply() 是异步的所以没有返回值, 而commit()是同步的且有返回值因而能知道修改是否成功。
9.多并发的提交 commit() 时,需等待正在进行的 commit ()数据更新到磁盘文件后才会继续往下执行,从而降低效率。 而 apply ()只是原子更新到内存,后调用 apply ()函数会直接覆盖前面内存数据,从而一定程度上很大的提高了效率。
10.不是线程安全的。
11.不自带加密功能。
12.不自带多进程共享,除非通过自定义ContentProvider等方式实现,但实现复杂且性能低下。

三、MMKV
1.基于Key-Value存储的跨平台通用数据持久化库,基于mmap(内存映射文件),适用于Android、iOS、macOS、Linux和Windows平台。
2.设计初衷是为了解决传统SharedPreferences在数据量较大时读写效率低下的问题,并提供比SQLite更简单和更高性能的API。
3.通过内存映射文件mmap(Memory Mapped File)存储Key-Value对和高效的编解码算法,将数据直接映射到内存中,避免了数据的序列化和反序列化过程,实现了极高的读写性能。
4.只将数据映射到内存中,不需要将数据全部读入内存,内存占用较低。
5.底层序列化和反序列化使用Protobuf实现,性能高且稳定。
6.支持常用数据类型及byte[]、StringSet、实现了Parcelable/Serializable接口的类型等数据类型的存取。
7.支持对存储内容进行加密(AES加密机制)。
8.特别适合于需要频繁读写大量数据且对性能要求较高的场景,非常适合于替代Android中的SharedPreferences和iOS中的NSUserDefaults。
9.支持多线程操作,是线程安全的,底层使用了锁机制。
10.支持多进程共享且效率较高,提供了进程锁来保证数据一致性。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

标签:文件,存储,何方神圣,MMKV,内存,SharedPreferences,序列化,数据
From: https://blog.csdn.net/cxsjabcabc/article/details/140568262

相关文章

  • 速度是conda的10倍以上,mamba的4倍,Pixi是何方神圣呢?真有这么快吗?
    原文链接:速度是conda的10倍以上,mamba的4倍,Pixi是何方神圣呢?真有这么快吗?本期教程写在前面今天中午看到通哥分享的教程,conda转圈圈,为何不试试pixi,Pixi是第一次了解。但是,通过他们的介绍,确实牛X,速度是conda的10倍以上,mamba的4倍。对于自己而言,自从使用了mamba以后,基本不......
  • android小球(二)——用户数据缓存详解SharedPreferences
    SharedPreferences概述SharedPreferences是Android平台上一个轻量级的存储辅助类,用来保存应用的一些常用配置,它提供了String,set,int,long,float,boolean六种数据类型。使用SharedPreferences进行存储的数据是存放在一个XML文件中的,同时它的存储方式是是以key-value的形式,key对应......
  • Flutter使用SharedPreferences示例
    SharedPreferencesAndroid原生开发经常会用SharedPreferences来保存一些设置,Flutter用什么来保存这些设置呢?在Flutter中,你可以使用shared_preferences插件来实现类似Android原生开发中的SharedPreferences功能,用于在应用程序中保存和检索持久化的键值对。具体使用首先,在你的Fl......
  • 用SharedPreferences写的存储工具类
    读写更方便publicclassPersistenceUtil{ privateContextcontext; publicContextgetContext(){ returncontext; } publicvoidsetContext(Contextcontext){ this.context=context; } publicPersistenceUtil(Contextcontext){ this.context=contex......
  • SharedPreferences
    SharedPreferences简介在Android开发过程中,有时候我们需要保存一些简单的软件配置等简单数据的信息,而如果我们直接用数据库存储的话又不太方便,在这里我们就可以用到SharedPreferences,SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此保存的数据主要是简单类型的......
  • Android性能优化:微信自用高性能持久化框架——MMKV组件原理
    MMKVMMKV——基于mmap的高性能通用key-value组件,底层序列化/反序列化使用protobuf实现,性能高,稳定性强。githubMMKV是基于mmap内存映射的移动端通用key-value组件,底层序列化/反序列化使用protobuf实现,性能高,稳定性强。从2015年中至今,在iOS微信上使用已有近3年,其......
  • SharedPreferences存储数据
    适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口令密码等  核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。通过DDMS的F......
  • 一统天下 flutter - 存储: shared_preferences - 用于操作 android 的 SharedPreferen
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-存储:shared_preferences-用于操作android的SharedPreferences,ios的NSUserDefaults,web的LocalStorage示例如下:lib\storage\shared_preferences.dart/**shared_preferences......
  • 两种保存状态的方法getSharedPreferences和onSaveInstanceState
    虽然这些东西很简单有时候还真的让你搞混@OverrideprotectedvoidonPause(){super.onPause();SharedPreferencesprefs=getSharedPreferences("X",MODE_PRIVATE);Editoreditor=prefs.edit();editor.putString("lastAct......
  • SQLiteOpenHelper&SharedPreferences练习
    目录结构:packagecom.dc.app;importjava.text.DecimalFormat;importjava.util.Locale;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.app.Dialog;importandroid.app.Notification;importandroid.app.Notificati......