12

我的应用程序将所有用户数据和首选项存储在 SQLite 数据库中,如果用户获得新手机、重新安装或恢复出厂设置,我希望保留这些数据和首选项。我已经阅读了Android 的 Data Backup Guide和他们的Android Backup Service,但在开始之前还有一些问题。

  1. 数据是否在安装期间或在我的应用程序首次启动时恢复?即,在调用我的主要活动的代码之前,该文件是否存在?
  2. 如果我的 SQLiteOpenHelper 类已经处理了升级,我还需要做些什么来处理旧数据库的恢复吗?如果数据库在我的应用程序启动之前存在,我认为不会。
  3. 备份时是否会因为 BackupManager 需要时间而面临并发问题?如果用户输入新数据并且我调用dataChanged(),然后在 BackupManager 调用之前再次发生同样的情况onBackup(),这些数据更改将如何处理?BackupManager 会简单地备份数据库的最新版本(应该包括这两个更改)吗?
  4. 尝试备份/恢复 SQLite 数据库会遇到什么问题?我见过开发人员说,一台设备上的数据库可能与另一台设备上的数据库不兼容。我想简单地使用 备份数据库FileBackupHelper,因为它看起来很简单。至少一位开发人员似乎通过禁用预写日志至少解决了一些兼容性问题。如果我采用这种方法,我期望的失败率是多少?如果非常高,我可能会考虑在此过程中转换为 CSV 文件并返回。
  5. 如果恢复失败,我可以捕捉到它,通知用户,并将麻烦数据的副本保存到存储中吗? 用于故障排除和通知用户。
  6. 备份操作“不是线程安全的”。明确如何处理。 安卓说,

为确保您的备份代理不会在您的活动的同时读取或写入您的文件,您必须在每次执行读取或写入时使用同步语句。

  • 这是否意味着我必须将每次对数据库的读/写都放在一个synchronized语句中?即,我必须将其添加到我的活动从数据库加载的每个地方或向其中写入信息?那是很多地方。
  • 或者这是否意味着只有备份代码必须使用synchronized

谢谢您的帮助。我只想正确地做到这一点,并让我的用户在今年圣诞节获得新手机时感到高兴!

4

1 回答 1

1

来自Android 文档

这应该回答你的 1 和 2 问题:

Android automatically performs a restore operation when your application is installed and there 
exists backup data associated with the user. The primary scenario in which backup data is restored 
is when a user resets their device or upgrades to a new device and their previously installed 
applications are re-installed.

3:由于您的数据将在安装过程中恢复,我认为您不会遇到并发问题

4:

Data backup is not guaranteed to be available on all Android-powered devices. However, your   
application is not adversely affected in the event that a device does not provide a backup 
transport. If you believe that users will benefit from data backup in your application, then you can 
implement it as described in this document, test it, then publish your application without any 
concern about which devices actually perform backup.

5:我不这么认为。

6:“每次执行读或写”似乎是不言自明的。每次对数据库进行操作时

于 2014-11-25T11:26:03.323 回答