有关在SQLite数据库中使用Android备份服务的问题

时间:2014-11-11 14:17:12

标签: android database sqlite android-file android-backup-service

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

  1. 在我的应用安装或初次启动期间是否还原了数据?即,在调用主Activity的代码之前文件是否存在?
  2. 如果我的SQLiteOpenHelper类已经处理升级,那么我还需要做些什么来处理旧数据库的恢复吗?我认为不是,如果数据库存在于我的应用程序启动之前。
  3. 备份时是否会遇到并发问题,因为BackupManager需要时间?如果用户输入新数据并且我调用dataChanged()然后在BackupManager调用{{}}之前再次发生相同问题1}},如何处理这些数据更改? BackupManager是否只备份最新版本的数据库(应该包括两个更改)?
  4. 尝试备份/恢复SQLite数据库会遇到什么问题?我看到开发人员说一台设备上的数据库可能与另一台设备上的数据库不兼容。我想使用onBackup()简单地备份数据库,因为it looks pretty simple to do。至少有一位开发人员似乎有resolved at least some compatibility issues by disabling Write Ahead Logging。如果我采用这种方法,我可以期待什么样的失败率?如果非常高,我可能会考虑转换为CSV文件并在此过程中返回。
  5. 如果恢复失败,我可以抓住它,通知用户,并将麻烦的数据副本保存到存储吗?用于故障排除并通知用户。
  6. 备份操作是"而不是线程安全。"澄清如何处理。 Android说,
  7.   

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

    • 这是否意味着我必须在FileBackupHelper语句中对数据库进行每次读/写操作?即,我必须将这个添加到我的活动从db加载或写入信息的每个地方?那是很多地方。
    • 或者是否只表示备份代码必须使用synchronized

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

1 个答案:

答案 0 :(得分:1)

来自Android Documentation

这应该回答你的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: "每次执行读或写时#34;似乎是不言自明的。 每次在DB上执行操作