我有一些键值对存储在缓存中。我知道共享首选项是实现它的一个很好且简单的方法。但似乎共享首选项将文件存储在数据目录中而不是缓存目录中。
我怎样才能以最佳实践做到这一点?谢谢你。
我建议使用 DataStore - Protocol Buffers。
DataStore是一种新的、改进的数据存储解决方案,旨在 替换共享首选项。基于 Kotlin 协程和 Flow 构建, DataStore 提供了两种不同的实现:Proto DataStore、 允许您存储类型化对象(由协议缓冲区支持)和 Preferences DataStore,存储键值对。数据已存储 异步、一致和事务性地克服了一些 SharedPreferences 的缺点。
什么是协议缓冲区? 协议缓冲区是 Google 的语言中立、平台中立、可扩展的序列化结构化数据机制 - 类似于 XML,但更小、更快、更简单。您定义一次数据的结构化方式,然后您可以使用特殊生成的源代码轻松地使用各种语言在各种数据流中写入和读取结构化数据。
如果您只需要一种非常简单的方法来存储键值对而不需要类型安全,则可以仅使用 DataStore Preferences(而不是已弃用的 SharePreferences):
https://developer.android.com/topic/libraries/architecture/datastore#preferences-datastore
或者,您可以使用具有类型安全功能的 Protobuf DataStore,但是您需要定义原始消息(设置架构)的额外开销,并且您可能还需要在将来的某个时候编写迁移代码并对消息进行版本化:
https://developer.android.com/topic/libraries/architecture/datastore#proto-datastore
回到您原来的具体问题:链接的 Protobuf DataStore 多进程指南还将 DataStore 文件存储在缓存目录中,所以我想在那里存储首选项应该是目前的最佳实践:
val dataStore: DataStore<Settings> = MultiProcessDataStoreFactory.create(
serializer = SettingsSerializer(),
produceFile = {
File("${context.cacheDir.path}/myapp.preferences_pb")
}
)
来源: https://developer.android.com/topic/libraries/architecture/datastore#multiprocess