我的应用程序将所有用户数据和首选项存储在 SQLite 数据库中,如果用户获得新手机、重新安装或恢复出厂设置,我希望保留这些数据和首选项。我已经阅读了Android 的 Data Backup Guide和他们的Android Backup Service,但在开始之前还有一些问题。
- 数据是否在安装期间或在我的应用程序首次启动时恢复?即,在调用我的主要活动的代码之前,该文件是否存在?
- 如果我的 SQLiteOpenHelper 类已经处理了升级,我还需要做些什么来处理旧数据库的恢复吗?如果数据库在我的应用程序启动之前存在,我认为不会。
- 备份时是否会因为 BackupManager 需要时间而面临并发问题?如果用户输入新数据并且我调用
dataChanged()
,然后在 BackupManager 调用之前再次发生同样的情况onBackup()
,这些数据更改将如何处理?BackupManager 会简单地备份数据库的最新版本(应该包括这两个更改)吗? - 尝试备份/恢复 SQLite 数据库会遇到什么问题?我见过开发人员说,一台设备上的数据库可能与另一台设备上的数据库不兼容。我想简单地使用 备份数据库
FileBackupHelper
,因为它看起来很简单。至少一位开发人员似乎通过禁用预写日志至少解决了一些兼容性问题。如果我采用这种方法,我期望的失败率是多少?如果非常高,我可能会考虑在此过程中转换为 CSV 文件并返回。 - 如果恢复失败,我可以捕捉到它,通知用户,并将麻烦数据的副本保存到存储中吗? 用于故障排除和通知用户。
- 备份操作“不是线程安全的”。明确如何处理。 安卓说,
为确保您的备份代理不会在您的活动的同时读取或写入您的文件,您必须在每次执行读取或写入时使用同步语句。
- 这是否意味着我必须将每次对数据库的读/写都放在一个
synchronized
语句中?即,我必须将其添加到我的活动从数据库加载的每个地方或向其中写入信息?那是很多地方。 - 或者这是否意味着只有备份代码必须使用
synchronized
?
谢谢您的帮助。我只想正确地做到这一点,并让我的用户在今年圣诞节获得新手机时感到高兴!