当前位置:   article > 正文

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

datastore和腾讯

MMKV

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

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

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

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

  • 使用方法:

    implementation 'com.tencent:mmkv:1.2.14'
  • 1
    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);
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 性能对比:
    (测试机器是 华为 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"
  • 1
  • 2
  • 3
  • 4
    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());
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/419509
推荐阅读
  

闽ICP备14008679号