上一篇介绍参考:
Android 架构组件 之 DataStore (1)
1. SharedPreferences 的缺点
(1). apply()看上去可以在UI线程中安全调用的同步 API,但是该 API 实际上执行磁盘 I/O 操作。
此外,apply() 会阻断 fsync() 上的UI线程:
每次有服务启动或停止以及每次 activity 在应用中的任何地方启动或停止时,
系统都会触发待处理的 fsync() 调用。
界面线程在 apply() 调度的待处理 fsync() 调用上会被阻断,这通常会导致 ANR。
(2) SharedPreferences 会将 解析错误 作为 运行时异常抛出。
2. Preferences DataStore 与 Proto DataStore 保存数据的方式
(1)Preferences DataStore:根据键访问数据,而无需事先定义架构。( 与 SharedPreferences 一样)
(2)Proto DataStore 使用 协议缓冲区 来定义架构。使用协议缓冲区可持久保留强类型数据。
与 XML 和其他类似的数据格式相比,协议缓冲区速度更快、规格更小、使用更简单,并且更清楚明了。
虽然使用 Proto DataStore 需要学习新的序列化机制(Serializer),但我们认为 Proto DataStore 有着强大的类型优势,值得学习。
3. Room 与 DataStore
如果需要实现部分更新、引用完整性或大型/复杂数据集,应考虑使用 Room,而不是 DataStore。
DataStore 非常适合小型或简单的数据集,但不支持 部分更新或 参照完整性。
参考文献:
https://developer.android.com/codelabs/android-preferences-datastore#3
https://developer.android.com/topic/libraries/architecture/datastore
网友评论