androidx: DataStore

181 阅读1分钟

image.png

Androidx的DataStore顾名思义也是为了存储数据使用的。但是大家可能会疑惑存储数据的话数据库和SharedPreferencet就够了吗,为什么又要使用一个新的存储方式呢?DataStore其实是google官方为了取代ShredPreference,SharedPreference有一些不可修复的缺陷,下面具体看看google官方给的对比图:

image.png

  1. SharedPreference虽然可以异步读写但是它还是会block UI线程
  2. SharedPrefercence不能捕获异常,例如在读写过程出现IO的异常无法进行不过,所以也就很难确认问题
  3. SharedPreference是类型不安全的。
  4. SharedPreference在多线程的情况下还存在数据一致性的问题,即SharedPreference不是线程安全的,但是dataStore使用原子操作,所以它是线程安全的。
  5. SharedPreference不支持数据合并,如果需要合并老的数据,需要自己手动一个一个的迁移。
  6. Preference DataStore和 Proto DataStore都属于DataStore,但是Preferences DataStore主要用于存储简单类型,Proto DataStore用于存储复杂类型。

另外一点就是DataStore结合了kotlin的corotinue和flow,对实现数据的异步以及监听变得更加的容易和方便。

Preference DataStore是使用键值对的方式存储,Proto DataStroe存储的是对象,用于存储复杂的对象。需要注意的是在是使用DataStore的时候一定要去捕获它的异常,要不然要是出现问题都很难找。