当我最初编写和发布我的应用程序时,我使用自定义的书面活动来处理应用程序设置。我使用自定义文件名来存储共享首选项,如下所示:
getSharedPreferences("custom_settings_file",MODE_PRIVATE);
但现在我正在重构我的应用程序,我想实现PreferenceActivity
或PreferenceFragment和一个带有PreferenceScreen
部分的 xml 文件。我见过的每个教程或示例都在使用
getDefaultSharedPreferences(context);
检索共享首选项,因为 PreferenceActivity 假定默认文件名来存储首选项,并且无法告诉它使用不同的首选项(至少在搜索和阅读文档一小时后我找不到一个)。
所以现在我有一个问题。如果我只是简单地使用新的默认文件,我的应用程序的现有用户将在更新应用程序时丢失他们的设置,因为新应用程序将不知道任何关于“custom_settings_file”的信息。在应用程序更新时将数据从旧文件移动到新文件的最佳方法是什么?
以下是我可以提出的可能选项:
- 扩展
Application
类并在 onCreate() 中实现一段代码,这样每次启动我的应用程序时,它都会检查“custom_settings_file”是否存在并将其内容移动到新的。但是在每次应用程序启动时运行一段代码似乎对于只需要运行一次的操作浪费了太多的处理资源。 - 只需通知用户他们的旧设置已消失。但显然这是不能接受的。
有比选项 1 更好的解决方案吗?也许有人已经面临类似的问题?