什么是mmkv
能打开github的同学看这边
打不开的看这边
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强
什么是mmap
mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享
导入依赖
dependencies {
implementation 'com.tencent:mmkv:1.2.9'
// replace "1.2.9" with any available version
}
简单封装一哈mmkv
话不多说 上代码 可直接复制
import android.os.Parcelable
import com.tencent.mmkv.MMKV
/*
*
* 存储工具类
* */
object KvUtil{
var mv: MMKV? = null
init {
mv=MMKV.defaultMMKV()
}
/**
* 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
*
* @param key
* @param object
*/
fun encode(key: String?, `object`: Any) {
when (`object`) {
is String -> {
mv?.encode(key, `object`)
}
is Int -> {
mv?.encode(key, `object`)
}
is Boolean -> {
mv?.encode(key, `object`)
}
is Float -> {
mv?.encode(key, `object`)
}
is Long -> {
mv?.encode(key, `object`)
}
is Double -> {
mv?.encode(key, `object`)
}
is ByteArray -> {
mv?.encode(key, `object`)
}
else -> {
mv?.encode(key, `object`.toString())
}
}
}
fun encodeSet(key: String?, sets: Set<String?>?) {
mv?.encode(key, sets)
}
fun encodeParcelable(key: String?, obj: Parcelable?) {
mv?.encode(key, obj)
}
/**
* 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
*/
fun decodeInt(key: String?): Int? {
return mv?.decodeInt(key, 0)
}
fun decodeDouble(key: String?): Double {
return mv?.decodeDouble(key, 0.00)!!
}
fun decodeLong(key: String?): Long {
return mv?.decodeLong(key, 0L)!!
}
fun decodeBoolean(key: String?): Boolean {
return mv?.decodeBool(key, false) == true
}
fun decodeBooleanTure(key: String?, defaultValue: Boolean): Boolean {
return mv?.decodeBool(key, defaultValue) == true
}
fun decodeFloat(key: String?): Float {
return mv?.decodeFloat(key, 0f)!!
}
fun decodeBytes(key: String?): ByteArray {
return mv?.decodeBytes(key)!!
}
fun decodeString(key: String?): String {
return mv?.decodeString(key, "").toString()
}
fun decodeStringDef(key: String?, defaultValue: String): String {
return mv?.decodeString(key, defaultValue).toString()
}
fun decodeStringSet(key: String?): Set<String> {
return mv?.decodeStringSet(key, emptySet()) as Set<String>
}
fun <T : Parcelable?> decodeParcelable(key: String?, tClass: Class<T>?): T? {
return mv?.decodeParcelable(key, tClass)
}
/**
* 移除某个key对
*
* @param key
*/
fun removeKey(key: String?) {
mv?.removeValueForKey(key)
}
/**
* 清除所有key
*/
fun clearAll() {
mv?.clearAll()
}
}
写在自己定义的MyApplication中
MMKV.initialize(this)
别忘记初始化 别忘记初始化 别忘记初始化 重要的事情说三遍
备注:啥也不是