我已经使用提供的FileBackupHelper
实现了BackupAgentHelper
,以备份和恢复我拥有的本机数据库.这是您通常与ContentProviders
一起使用的数据库,它驻留在/data/data/yourpackage/databases/
中.
人们会认为这是一种常见的情况.然而,doctor 们并不清楚该怎么做:http://developer.android.com/guide/topics/data/backup.html.There is no 101 specifically for these typical databases. Hence I used the 102,将其指向"/databases/
"中的.db文件,在ContentProviders
中的任何db操作(如db.insert
)周围引入锁定,甚至try 在onRestore()
之前创建"/databases/
"目录,因为它在安装后不存在.
过go ,我在不同的应用程序中成功地为SharedPreferences
人实现了类似的解决方案.然而,当我在emulator-2.2中测试我的新实现时,我看到正在从日志(log)中执行到LocalTransport
的备份,以及正在执行的恢复(并调用onRestore()
).Yet, the db file itself is never created.
请注意,这一切都是在安装之后、首次启动应用程序之前、执行恢复之后进行的.除此之外,我的测试策略是基于http://developer.android.com/guide/topics/data/backup.html#Testing.
还请注意,我不是在谈论我自己管理的sqlite数据库,也不是关于备份到sdcard、自己的服务器或其他地方.
我确实在文档中看到关于建议使用定制BackupAgent
的数据库的提及,但这似乎并不相关:
但是,您可能希望扩展 如果您需要执行以下操作,请直接使用BackupAgent: *备份数据库中的数据.如果您有一个SQLite数据库, 想要在用户 重新安装您的应用程序,您需要 要构建自定义BackupAgent,请执行以下操作 期间读取相应的数据. 备份操作,然后创建您的 表,并在 恢复操作.
Some clarity please.个
如果我真的需要自己做到SQL级别,那么我担心以下主题:
开放数据库和事务.我不知道如何在我的应用程序工作流程之外关闭这样一个单例类.
如何通知用户备份正在进行且数据库已锁定.可能需要很长时间,所以我可能需要显示进度条.
如何在恢复时执行同样的操作.据我所知,恢复可能发生在用户已经开始使用应用程序(并将数据输入数据库)的时候.因此,您不能假定只恢复备份的数据(删除空数据或旧数据).您必须以某种方式加入它,这对于任何非平凡的数据库来说都是不可能的,因为id的原因.
如何在恢复完成后刷新应用程序,而不会让用户停留在某个现在无法访问的点上.
我是否可以确保数据库已在备份或还原时升级?否则,预期的架构可能不匹配.