📜  anroid 首选项管理器已弃用 substiotuion (1)

📅  最后修改于: 2023-12-03 15:29:24.538000             🧑  作者: Mango

Android 首选项管理器已弃用 Substitution

简介

Android 首选项管理器已弃用 Substitution 提供了一种简便的方法来存储和管理应用程序的偏好设置(如用户设置),而无需使用 SQLite 数据库。但是,自 Android 11 开始,Substitution 已被弃用。替代方案是使用 Jetpack 库中的 数据存储

为什么会被弃用

Substitution 存在一些问题,包括:

  • 性能问题:Substitution 的实现可能导致性能下降,特别是对于更大的 key-value 数据集。
  • 安全问题:Substitution 在应用的共享用户 ID 的情况下,可能会被其他应用程序意外地修改或读取。
  • 实现问题:Substitution 实现时需要在应用的内部存储中划分出一块空间用于存储数据,但是其他在应用之外使用的工具可能会无意间删除这块空间。

因此,Android 团队决定弃用 Substitution 并推荐使用其他更好的解决方案。

替代方案

替代方案是使用 Jetpack 库中的数据存储。数据存储提供了四个主要的存储选项:

  • SharedPreferences:用于存储键-值对,类似于 Substitution。
  • 文件存储:用于将数据存储到应用的内部或外部存储器中的文件中。
  • SQLite 数据库:用于存储结构化数据。
  • 网络分页存储:用于将数据存储到云端存储器中。

数据存储提供了更好的性能、安全性和可靠性,因此建议在应用程序中使用。

如何使用

使用数据存储非常简单。下面是示例代码,使用 SharedPreferences 存储键-值对:

// 获取 SharedPreference 对象
val sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE)

// 写入数据
with (sharedPref.edit()) {
    putBoolean(getString(R.string.saved_high_score_key), true)
    apply()
}

// 读取数据
val defaultValue = resources.getBoolean(R.bool.saved_high_score_default)
val highScore = sharedPref.getBoolean(getString(R.string.saved_high_score_key), defaultValue)

请注意,从 Android 10 开始,应用程序默认不能访问外部存储,因此需要请求相应的权限。

总结

Android 首选项管理器已弃用 Substitution,使用数据存储作为替代方案。数据存储提供了更好的性能、安全性和可靠性。使用数据存储非常简单,可以使用 SharedPreferences 来存储键-值对。从 Android 10 开始,默认情况下应用程序不能访问外部存储,因此需要请求权限。