当我最初编写和发布我的应用程序时,我使用自定义的书面 Activity 来处理应用程序设置。我使用自定义文件名来存储共享首选项,如下所示:
getSharedPreferences("custom_settings_file",MODE_PRIVATE);
但现在我正在重构我的应用程序,我想实现 PreferenceActivity
或 PreferenceFragment和一个带有 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/