您的位置:

深入了解 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 位加密等多项特性,非常适合进行本地数据的存储。