Android MMKV

文章目录

Android MMKV

概述

MMKV 是腾讯开源的高性能、轻量级 Key-Value 存储框架,基于 mmap 内存映射与Protobuf 编码。

替代 SharedPreferences,适用于高频读写、多进程共享、敏感数据缓存等场景。

SP问题

  • ANR风险
  • 整体加载
  • 全量写入
  • 多线程不安全

MMKV优点

  • 基于mmap内存映射
    • 将磁盘文件直接映射到进程虚拟内存,读写内存即读写文件,性能远高于IO操作。
  • Protobuf序列化
    • Protobuf序列化体积小、解析快,比XML/JSON更紧凑。
  • 增量追加写入
    • 每次更新仅追加新数据到文件末尾,不是全量写入。
    • 文件空间不足是自动扩容,并促发文件整理,清理过期数据。
  • 多线程安全

添加依赖

复制代码
implementation 'com.tencent:mmkv:2.4.0'

使用

初始化

kotlin 复制代码
class BaseApp : Application() {
    override fun onCreate() {
        super.onCreate()
        val rootDir = MMKV.initialize(this)
        Log.e("TAG", "rootDir: ${rootDir}") // /data/user/0/com.example.test/files/mmkv
    }
}

增改数据

kotlin 复制代码
val mmkv = MMKV.defaultMMKV()
MMKV userKv=MMKV.mmkvWithID("user_info"); // 命名空间隔离

mmkv.encode("name", "小明")
mmkv.encode("age", 18)
mmkv.encode("sex", true)
val address = listOf("河北省", "石家庄市")
mmkv.encode("address", Gson().toJson(address))
val hobbies = setOf("篮球", "足球")
mmkv.encode("hobbies", hobbies)
val user = User("小白", 18, true)
mmkv.encode("user", user)

读取数据

kotlin 复制代码
val name = mmkv.decodeString("name")
val age = mmkv.decodeInt("age")
val sex = mmkv.decodeBool("sex")
val addressJson = mmkv.decodeString("address")
val address = Gson().fromJson(addressJson, Array<String>::class.java)
val hobbiesSet = mmkv.decodeStringSet("hobbies")
val user = mmkv.decodeParcelable<User>("user", User::class.java)

删除数据

kotlin 复制代码
// 删单个
kv.removeValueForKey("name"); 

// 清空全部
kv.clearAll(); 

MMKV与DataStore对比

  • MMKV:
    • mmap内存映射
    • Protobuf编码
    • 增量追加写入
    • 零拷贝、极快
  • DataStore
    • 基于文件IO
    • 全量写入
    • 使用ProtoBuf格式存储
    • 依靠协程调度
相关推荐
半摆烂日常6 小时前
低代码平台API对接实践:接口鉴权与数据同步的完整实现
android·低代码·rxjava
事圆则缓7 小时前
volatile 使用场景全解析:它能保证什么,又解决不了什么
android
蒲公英内测分发7 小时前
智能投影仪参加海外展会,未上架的 Android 配套 App 怎么让客户限时试用?
android
ii_best8 小时前
按键精灵手机端开发安卓版实战:手写一个可最小化、可拖动的「运行日志悬浮窗」(附完整 源码 + 踩坑记录)
android·ios·智能手机·自动化·ai编程·按键精灵
终端安全笔记8 小时前
安卓做 MDM 管控,先分清三种注册入口
android·安全·智能手机
乌萨达9 小时前
手机模拟器安卓怎么用?电脑安装应用、玩手游与账号同步指南
android·智能手机·电脑·雷电模拟器
美狐美颜SDK开放平台9 小时前
Android与iOS直播APP美颜有什么区别?视频美颜SDK开发详解
android·ios·音视频·视频美颜sdk
春猿火11 小时前
某市-2026【网安·论道】misc-afterimage_note-wp
android
恋猫de小郭12 小时前
Shopify 回应为什么从 RN 回到原生,为什么不用 KMP ?
android·前端·flutter
fundroid14 小时前
Android AI 开发,真正拉开差距的是工程闭环
android·ai·大模型·agent