Android 中的 PreferenceDataStore O

PreferenceDataStore in Android O

我读了这篇文章https://medium.com/@ianhlake/hidden-gems-of-android-o-7def63136629。这是那里写的:

SharedPreferences is dead. Long live SharedPreferences.

SharedPreferences 会继续在 Android O 工作吗?我们是否需要通过实现 PreferenceDataStore

来实现自己的机制来将数据存储在键值对中

任何人都可以帮助如何使用 PreferenceDataStore& 来实现新的 SharedPreferences& 开发自己的实现的用例是什么?当前方法有什么缺点吗?

您应该摒弃以貌取人的坏习惯,而不是仅仅从吸引人的章节标题中得出结论,只需完整阅读上述 post。

共享首选项在 Android Oreo 中甚至没有被弃用,Ian Lake 提到的是 改进 ,它允许您的应用保持相同的简单性 key/value 对 API 就像现在一样,但另外能够为所述数据提供您自己的数据存储实现(即在 Firebase、远程服务器等中)。如果您不需要它,那么您可以像目前所做的那样简单地使用共享首选项 w/o 代码中的任何更改,对于这种用例,没有任何真正的改变。

我认为您正在阅读此处的字里行间。 SharedPreferences 没有被弃用。然而,它们也有很多问题,因此在 Android O 中,PreferenceDataStore 接口旨在为开发人员提供开发自己的实现的选项,该实现将被使用而不是 SharedPreferences。从 docs 你可以调用 setPreferenceDataStore

if the data store is set, the Preferences will no longer use SharedPreferences.

所以我认为他在 post 中的意思是您现在有一种内置的方式来推出您自己的提供商以克服 SharedPreferences

的缺点

我认为您得出了错误的结论,Shred Preferences 在 Android O.

中运行良好

在AndroidO中,个人偏好甚至整个PreferenceManager都可以调用setPreferenceDataStore(),让你的app保持同样简单的key/value对API,但是提供你自己的存储底层数据的机制。

阅读此link

我想不出只适用于使用 PreferenceDataStore 而不是完全适用于 SharedPreferences 的情况,但我确实认为如果您想一起使用它们会有所帮助。

SharedPreferences 为您提供了一项很棒的服务,即当您的应用程序更新时,数据仍保留在首选项中,但使用 PreferenceDataStore,您还可以以与 SharedPreferences 中相同的格式存储数据。现在假设您想要使用相同的首选项界面,但您希望将这些值存储在云中而不是设备中,因为设备可能会发生故障。

PreferenceDataStore 可以帮助您的是,它为您提供了在任何地方存储数据和编写自己的实现的灵活性。它并不意味着完全替换 SharedPreferences,但您可以根据需要进行替换。

例如,您可以在共享首选项中使用应用程序的访问令牌,如果需要,可以在云或本地数据库或云或文件系统中使用所有其他数据,并且可以使用 PreferenceDataStore 接口,记下你自己的实现,然后使用它。

甚至在 link 开发者文档中 Google PreferenceDataStore https://developer.android.com/reference/android/preference/PreferenceDataStore.html 写着

In most cases you want to use SharedPreferences as it is automatically backed up and migrated to new devices. However, providing custom data store to preferences can be useful if your app stores its preferences in a local db, cloud or they are device specific like "Developer settings". It might be also useful when you want to use the preferences UI but the data are not supposed to be stored at all because they are valid per session only.

所以你可以看到,即使 google 也不希望你一直使用 PreferenceDataStore,它只是在你需要使用相同的 Preferences 样式来存储键值对的时候使用,但是您想要实现自己的数据存储,这将为您提供比当前在 SharedPreferences 中更大的灵活性。

例如,如果您想获取 SharedPreferences,然后将 SharedPreferences 数据放在云服务器上怎么办。你想要它在设备上,但也备份在云上,在这种情况下,PreferenceDataStore 可以帮助你。