Android几种数据存储的对比(MMKV、DataStore、SharedPreference)

MMKV

  • Github地址:https://github.com/Tencent/MMKV

  • MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。近期也已移植到 Android / macOS / Win32 / POSIX 平台,一并开源。

  • 加密前数据:
    在这里插入图片描述

  • 加密后数据:
    在这里插入图片描述

  • 使用方法:

    implementation 'com.tencent:mmkv:1.2.14'
    private void mmkv() {
        //application中初始化
        MMKV.initialize(this);
        //创建
        MMKV kv = MMKV.defaultMMKV();
//        MMKV kv  = MMKV.defaultMMKV(1,"123456");
        kv.encode("bool", true);
        boolean bValue = kv.decodeBool("bool");
        Log.e(TAG, "mmkv: " + bValue);
        kv.encode("str", "Hello from mmkv");
        String str = kv.decodeString("str");
        Log.e(TAG, "mmkv: " + str);
    }

  • 性能对比:
    (测试机器是 华为 Mate 20 Pro 128G,Android 10,每组操作重复 1k 次,时间单位是 ms。)
    在这里插入图片描述

DataStore

  • Jetpack DataStore 是一种改进的新数据存储解决方案,允许使用协议缓冲区存储键值对或类型化对象。DataStore 以异步、一致的事务方式存储数据,克服了 SharedPreferences(以下统称为SP)的一些缺点。DataStore基于Kotlin协程和Flow实现,并且可以对SP数据进行迁移,旨在取代SP。

  • Preferences DataStore:与SharedPreferences类似,通过键值对存储数据,此实现不需要预定义模式,也不提供类型安全。

  • Proto DataStore:通过Protocol-Buffers定义存储数据类型以及结构,保证类型安全。

  • 存储的数据:
    在这里插入图片描述

  • DataStore没有自带加密方法,需要自行对数据进行加密。

  • 使用方法:

    //datastore
    implementation "androidx.datastore:datastore-preferences:1.0.0"
    // RxJava2
    implementation "androidx.datastore:datastore-preferences-rxjava2:1.0.0"
    private void dataStore() {
        Preferences.Key<String> KEY_USER_NAME = new Preferences.Key<>("username");
        Preferences.Key<String> KEY_PASS_WORD = new Preferences.Key<>("password");
        //
        RxDataStore<Preferences> dataStore = new RxPreferenceDataStoreBuilder(this, /*name=*/ "settings").build();
        // 写入
        dataStore.updateDataAsync(prefsIn -> {
            MutablePreferences mutablePreferences = prefsIn.toMutablePreferences();
            mutablePreferences.set(KEY_USER_NAME, "zhangyu");
            mutablePreferences.set(KEY_PASS_WORD, "123456");
            return Single.just(mutablePreferences);
        });
        //读取
        Flowable<String> userNameFlow =
                dataStore.data().map(prefs -> prefs.get(KEY_USER_NAME));
        Flowable<String> userPasswdFlow =
                dataStore.data().map(prefs -> prefs.get(KEY_PASS_WORD));
        Log.e(TAG, "dataStore: username=" + userNameFlow.blockingFirst());
        Log.e(TAG, "dataStore: password=" + userPasswdFlow.blockingFirst());
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值