Android开发mmkv的研究或者其他技术

MMKV-轻量级高效存储数据库

2021-07-02  本文已影响0人  千夜零一

介绍

MMKV 是腾讯旗下开发的一款存储组件,采用 key - value方式存储,存储数据种类比较多,读写效率高。
一款比sharepreferences稍重,远远小于数据库量级,但性能卓越的存储框架。
必答:mmap+protobuf

特性

对比

单线程还是多线程,MMKV的读写能力都远远的甩开了SharedPreferences&SQLite&SQLite+Transacion

文件读写限制了SharePrefernces的速度,对此,它提供了apply()异步提交,在用户无感知情况下在子线程提交数据。

SharedPreferences是对于单进程而言的单独实例,数据的备份全部在单个进程完成,所以在进行多进程读写时,发生错误是大概率的。

用法

1、添加依赖库

implementation 'com.tencent:mmkv-static:1.0.23'

2、Application中进行初始化

MMKV.initialize(this)

3、具体使用

 val mmkvTV = findViewById<TextView>(R.id.mmkvTV)
        mmkvTV.setOnClickListener {
            //获得默认存储对象
            val mmkv = MMKV.defaultMMKV()
            //以k-v形式存值
            mmkv.encode("a",false)
            mmkv.encode("b","sss")
            mmkv.encode("c",0.99)
            val stu = Stu().apply {
                this.id = "001"
                this.name = "Jacke"
            }
            mmkv.encode("d",stu)
            //通过encode存,decode取
            val test1 = mmkv.decodeBool("a")
            val test2 = mmkv.decodeString("b")
            val test3 = mmkv.decodeDouble("c")
            val test4 = mmkv.decodeParcelable("d",Stu::class.java)  //序列化插件只能操作java类,not kotlin
            //打印取出结果集
            println("mmkv=>>$test1")
            println("mmkv=>>$test2")
            println("mmkv=>>$test3")
            println("mmkv=>>${test4.id+test4.name}")
//            I/System.out: mmkv=>>false
//            I/System.out: mmkv=>>sss
//            I/System.out: mmkv=>>0.99
//            I/System.out: mmkv=>>001Jacke
        }

序列化对象类:可以通过AS插件快速生成

/**
 * @data on 2021/7/2 11:04 上午
 * @auther
 * @describe 序列化对象
 */
public class Stu implements Parcelable {
    public String id = "";
    public String name = "";

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.id);
        dest.writeString(this.name);
    }

    public void readFromParcel(Parcel source) {
        this.id = source.readString();
        this.name = source.readString();
    }

    public Stu() {
    }

    protected Stu(Parcel in) {
        this.id = in.readString();
        this.name = in.readString();
    }

    public static final Parcelable.Creator<Stu> CREATOR = new Parcelable.Creator<Stu>() {
        @Override
        public Stu createFromParcel(Parcel source) {
            return new Stu(source);
        }

        @Override
        public Stu[] newArray(int size) {
            return new Stu[size];
        }
    };
}
上一篇下一篇

猜你喜欢

热点阅读