1

我已经查看了文档和示例 BackupRestore 应用程序,并编写了我自己的测试应用程序来实现android:backupAgent. 我扩展了BackupAgent课程,因为我主要关心的是能够从数据库备份数据。我似乎无法使用此功能制作一个简单的概念验证应用程序。

为了让事情变得异常简单,我在清单中声明了android:backupAgentas MyBackupAgent。然后我创建了一个类 MyBackupAgent.java,扩展BackupAgent. onBackup()然后我为类中的和onRestore()方法创建了覆盖MyBackupAgent,就像在示例和文档中一样。我在每个函数的开头添加了一个Log.i()调用,以便我可以在 LogCat 中识别函数何时被调用。同样,我在这两个上都设置了断点。然后我继续实现我的代码来备份数据库。

我使用 2.2w/Google API 创建了一个模拟器图像,甚至在 Accounts & Sync 下添加了一个 gmail 帐户。运行 adb 命令以启用bmgr、备份应用程序、运行备份、卸载应用程序、重新安装应用程序等......我从来没有在日志文件中收到来自or函数中的Log.i()命令的消息。onBackup()onRestore()

我在运行 2.2 的 Evo 4g 上再次尝试。结果相同。备份管理器似乎没有调用类中的onBackup()onRestore()函数MyBackupAgent

我在日志中收到的唯一奇怪消息是来自BackupManagerService声明“备份通过但 e=true p=false”的消息,我相信响应 ADB 命令来备份应用程序。

有什么建议么?我是否错误地认为and函数中的Log.i()语句会出现在 LogCat 中?onBackup()onRestore()

4

3 回答 3

6

输出Backup pass but e=true p=false表示备份管理器已启用 ( e=true) 但未配置 ( p=false)。

只有同时满足这两个条件时,它才会运行备份。因此,由于某种原因,您的模拟器映像上没有配置备份管理器,在挖掘代码后我注意到它应该在启动期间自动配置(DefaultActivity

I/ActivityManager(   73): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.sdksetup/.DefaultActivity } from pid 0

我刚刚创建了一个新的模拟器图像,它在那里没有问题。

于 2011-01-09T13:12:48.283 回答
3

我还尝试使用“新”备份管理器服务,但总是收到以下错误消息:

12-01 09:58:54.420: WARN/BackupTransportService(9965): Unknown package in backup request: @pm@
12-01 09:58:54.450: WARN/BackupTransportService(9965): Not ready for backup request right now: [OperationScheduler: enabledState=false lastSuccess=2010-10-07/09:33:51 moratoriumSet=2010-12-01/09:53:32 moratorium=1970-01-01/01:00:00 trigger=1970-01-01/01:00:00]
12-01 09:58:54.450: WARN/PerformBackupThread(9965): Backup pass unsuccessful, restaging

有谁知道这是什么意思???

如果我使用以下命令将备份传输更改为本地版本

adb shell bmgr transport android/com.android.internal.backup.LocalTransport

一切正常。所以这不是我的代码的问题,我认为......

问候!

于 2010-12-01T09:57:16.767 回答
3

检查手机的设置。如果同步服务被禁用,那么通过数据备份 API 的备份将不起作用。

于 2012-10-05T13:46:10.040 回答