深入了解 Android MMKV

一、MMKV 是什么

MMKV 是由微信团队开源的一款高效、简单易用的 Key-Value 存储框架,其主要特点有:

  • 支持多线程并发读写,存储效率高
  • 支持自动序列化, no-compile, no-code,方便易用
  • 底层采用 mmap(内存映射) 技术实现,读写效率更高
  • 支持 AES 256 位加密

使用 MMKV 可以在不需要数据库的情况下,轻松实现数据的本地缓存。

二、如何使用

MMKV 的使用非常简单,只需要添加依赖之后,即可进行数据的读写。

    <!-- 添加依赖 -->
    <dependency>
        <groupId>com.tencent:mmkv</groupId>
        <artifactId>mmkv-static</artifactId>
        <version>1.2.2</version>
    </dependency>

    // 初始化MMKV
    MMKV.initialize(this);

    // 存储数据
    MMKV mmkv = MMKV.defaultMMKV();
    mmkv.encode("key", "value");

    // 读取数据
    String value = mmkv.decodeString("key");

三、支持的数据类型

MMKV 支持以下数据类型的存储:

  • String
  • int
  • long
  • float
  • double
  • boolean
  • byte[]
  • Set<String>
  • 自定义对象

其中,自定义对象需要实现 Parcelable 接口以支持序列化。

四、多线程并发读写

MMKV 支持多线程并发读写,可以在多个线程中同时操作 MMKV 存储的数据。

    // 多线程并发写入
    ExecutorService executorService = Executors.newFixedThreadPool(5);
    for (int i=0;i<5;i++){
        executorService.execute(new Runnable() {
            @Override
            public void run() {
                for (int j=0;j<50;j++){
                    mmkv.encode("key"+j, "value"+j);
                }
            }
        });
    }
    executorService.shutdown();
    executorService.awaitTermination(1, TimeUnit.MINUTES);

    // 多线程并发读取
    ExecutorService executorService = Executors.newFixedThreadPool(5);
    for (int i=0;i<5;i++){
        executorService.execute(new Runnable() {
            @Override
            public void run() {
                for (int j=0;j<50;j++){
                    String value = mmkv.decodeString("key"+j);
                    Log.d(TAG, "value="+value);
                }
            }
        });
    }
    executorService.shutdown();
    executorService.awaitTermination(1, TimeUnit.MINUTES);

五、mmap技术

MMKV 底层采用 mmap 技术实现,通过将文件映射到进程的地址空间内,可以实现高效的读写操作。

在 MMKV 中,mmap 技术的使用可以优化数据的 I/O 性能,提升存储效率。

六、AES 256 位加密

MMKV 支持采用 AES 256 位加密存储数据,可以有效保障数据的安全性。

    // 使用AES 256位加密保存数据
    MMKV mmkv = MMKV.mmkvWithID("MyData", MMKV.MULTI_PROCESS_MODE);
    byte[] bytes = "secret data".getBytes();
    byte[] key = "password".getBytes();
    mmkv.encode("key", bytes, key);

    // 使用AES 256位加密读取数据
    byte[] decodedBytes = mmkv.decodeBytes("key", null, key);

七、总结

Android MMKV 是一个高效、简单易用的 Key-Value 存储框架,实现了多线程并发读写、mmap 技术、AES 256 位加密等多项特性,非常适合进行本地数据的存储。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/231692.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-11 01:06
下一篇 2024-12-11 01:06

相关推荐

  • Android ViewPager和ScrollView滑动冲突问题

    Android开发中,ViewPager和ScrollView是两个常用的控件。但是当它们同时使用时,可能会发生滑动冲突的问题。本文将从多个方面介绍解决Android ViewPa…

    编程 2025-04-28
  • Android如何点击其他区域收起软键盘

    在Android应用中,当输入框获取焦点弹出软键盘后,我们希望能够点击其他区域使软键盘消失,以提升用户体验。本篇文章将说明如何实现这一功能。 一、获取焦点并显示软键盘 在Andro…

    编程 2025-04-28
  • Android Studio HUD 实现指南

    本文将会以实例来详细阐述如何在 Android Studio 中使用 HUD 功能实现菊花等待指示器的效果。 一、引入依赖库 首先,我们需要在 build.gradle 文件中引入…

    编程 2025-04-27
  • Android和Vue3混合开发方案

    本文将介绍如何将Android和Vue3结合起来进行混合开发,以及其中的优势和注意事项。 一、环境搭建 在进行混合开发之前,需要搭建好相应的开发环境。首先需要安装 Android …

    编程 2025-04-27
  • Android Java Utils 可以如何提高你的开发效率

    Android Java Utils 是一款提供了一系列方便实用的工具类的 Java 库,可以帮助开发者更加高效地进行 Android 开发,提高开发效率。本文将从以下几个方面对 …

    编程 2025-04-27
  • 深入解析Vue3 defineExpose

    Vue 3在开发过程中引入了新的API `defineExpose`。在以前的版本中,我们经常使用 `$attrs` 和` $listeners` 实现父组件与子组件之间的通信,但…

    编程 2025-04-25
  • 深入理解byte转int

    一、字节与比特 在讨论byte转int之前,我们需要了解字节和比特的概念。字节是计算机存储单位的一种,通常表示8个比特(bit),即1字节=8比特。比特是计算机中最小的数据单位,是…

    编程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什么是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一个内置小部件,它可以监测数据流(Stream)中数据的变…

    编程 2025-04-25
  • 深入探讨OpenCV版本

    OpenCV是一个用于计算机视觉应用程序的开源库。它是由英特尔公司创建的,现已由Willow Garage管理。OpenCV旨在提供一个易于使用的计算机视觉和机器学习基础架构,以实…

    编程 2025-04-25
  • Android JUnit测试完成程序自动退出决方法

    对于一些Android JUnit测试的开发人员来说,程序自动退出是一个经常面临的困扰。下面从多个方面给出解决方法。 一、检查测试代码 首先,我们应该仔细检查我们的测试代码,确保它…

    编程 2025-04-25

发表回复

登录后才能评论