android - 从 getSharedPreferences(自定义文件)迁移到 getDefaultSharedPreferences()

标签 android sharedpreferences

当我最初编写和发布我的应用程序时,我使用自定义的书面 Activity 来处理应用程序设置。我使用自定义文件名来存储共享首选项,如下所示:

getSharedPreferences("custom_settings_file",MODE_PRIVATE);

但现在我正在重构我的应用程序,我想实现 PreferenceActivityPreferenceFragment和一个带有 PreferenceScreen 部分的 xml 文件。我见过的每个教程或示例都在使用

getDefaultSharedPreferences(context);

检索共享首选项,因为 PreferenceActivity 使用默认文件名来存储首选项,并且没有办法告诉它使用不同的文件名(至少我在搜索和阅读文档一小时后找不到)。

所以现在我有一个问题。如果我只是简单地使用新的默认文件,我的应用程序的现有用户在更新应用程序时将丢失他们的设置,因为新应用程序将不知道任何关于“custom_settings_file”的信息。在应用程序更新时将数据从旧文件移动到新文件的最佳方法是什么?

以下是我可能想到的选项:

  • 扩展 Application 类并在 onCreate() 中实现一段代码,以便每次启动我的应用程序时,它都会检查是否存在“custom_settings_file”并将其内容移动到新的。但是,在每次应用启动时运行一段代码似乎是在为一个只需要运行一次的操作浪费太多的处理资源。
  • 只需通知用户他们的旧设置已消失。但这显然是 Not Acceptable 。

有没有比选项 1 更好的解决方案?也许有人已经遇到过类似的问题?

最佳答案

是什么阻止你只做一次第一名? 只需向新的共享首选项添加一个“迁移” bool 值。

关于android - 从 getSharedPreferences(自定义文件)迁移到 getDefaultSharedPreferences(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467916/

相关文章:

android - 通过 xml 更改切换按钮文本颜色

java - Android:共享首选项。如何正确实现它们

android - 与 Android 一键通

android - 有什么 butterknife 可以做而数据绑定(bind)做不到的吗?

android - 如何在首选项中存储图像资源/名称

java - 我使用 shareDpreferences 将字符串保存在 textView 中,关闭应用程序并再次打开后,它不起作用

java - 多少简单的键值对对于在 Android 中存储数据来说太多了?

android - 跟踪 android 应用程序打开的次数

android - 将数据从 Viewmodel 设置为 Activity android kotlin

java - 无法解析父类(super class)