Android 安卓告别SharedPreFerences,你好MMKV

MMKV是腾讯开源的轻量级持久化存储框架,相比于传统的SharedPreFerences(以下简称SP),优点有很多

  1. MMKV有更好的锁机制来保证数据的完整,而SP的跨进程和apply机制会导致数据的丢失
  2. SP是全量更新,也正因如此,它的时间开销更大,MMKV存储是mmap,无需全量写入
  3. MMKV同时也能够直接导入SP中的数据
  4. 使用MMKV能够更好的避免程序ANR

为什么要使用 MMKV

使用SP低性能导致程序ANR,commit 和 apply 均可能会造成ANR,这也是Android工程师最为痛恨的大病之一,所以使用MMKV可以避免此问题,使得自己心情舒畅!从下图看出MMKV与SP的读写耗时对比,MMKV也是毫不逊色的!

(下面这一个图是我自己写的代码测试所得到的)

MMKV Github给出的:
Writing random int for 10000 times, we get this chart:
写入随机Int值10000次所得到的图表


代码使用

来实操一下,看看MMKV耐不耐操

引入

dependencies {
    implementation 'com.tencent:mmkv-static:1.2.9'
}

最简单的代码栗子

1、在Application初始化

MMKV.initialize(this)//会返回MMVK存储的目录(String)

2、创建MMKV,可以通过 defaultMMKV() 来创建,这个是全局默认的;也可以通过 mmkvWithID() 对应自己业务来创建,如下:

val mmkv = MMKV.defaultMMKV()
val mmkv = MMKV.mmkvWithID("mmapID")

3、数据写入,可以写入Int,String,Boolean,Long,Float,Double类型的数据,只需要调用 encode() 方法写入数据,会根据数据类型进行重载。

//写入Int
mmkv.encode("keyName1", 123)

//写入String
mmkv.encode("keyName2", "Text")

//写入Boolean
mmkv.encode("keyName3", true)

//写入Long
mmkv.encode("keyName4", 123L)

...

4、数据读取,通过 decode 来进行读取

//读取key为keyName1的Int类型数据
mmkv.decodeInt("keyName1")

//读取key为keyName1的Int类型数据,如果对应key的值不存在,会返回默认值123
mmkv.decodeInt("keyName1",123)

//读取key为keyName2的String类型数据,如果对应key的值不存在,会返回null,建议用下一个
mmkv.decodeString("keyName2")

//读取key为keyName2的String类型数据,如果对应key的值不存在,会返回默认字符串:defaultValue
mmkv.decodeString("keyName2", "defaultValue")

//不再举例,Boolean,Long,Float,Double参考以上使用


GitHub

MMKV:https://github.com/Tencent/MMKV