onRestore不会为我的自定义BackupAgent调用
我的Android应用程序中有一些数据需要备份和恢复。 为此,我创建了一个自定义的BackupAgent
实现。
在我的清单中包含备份代理,如下所示
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="auto"
package="com.myapp"
android:versionCode="14"
android:versionName="1.13" >
<application
android:backupAgent="com.myapp.MyBackupAgent">
<meta-data
android:name="com.google.android.backup.api_key"
android:value="my key" />
我已经包含了备份服务api密钥,尽管我正在使用模拟器(Android 2.2)进行测试,并且它不应该是必需的,因为它使用本地备份传输。
为了做备份和恢复测试,我做了以下工作:
启用备份
adb shell bmgr启用true
调用BackupManager类中的dataChanged方法时,调用我的代码的一部分。
手动启动备份操作
adb shell bmgr运行
检查我的自定义BackupAgent的onBackup方法被调用的日志。
事情是,onRestore方法似乎并没有被调用,我不知道为什么。 重新安装应用程序或手动触发与adb恢复后,我在控制台中看到以下内容。
$adb shell bmgr restore com.myapp
restoreStarting: 2 packages
restoreFinished: 0
done
另一个在日志中
D/AndroidRuntime( 8259):
D/AndroidRuntime( 8259): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
D/AndroidRuntime( 8259): CheckJNI is ON
D/AndroidRuntime( 8259): --- registering native functions ---
D/BackupManagerService( 59): MSG_RUN_RESTORE observer=android.app.backup.IRestoreObserver$Stub$Proxy@450e16a8
V/LocalTransport( 59): start restore 1
V/LocalTransport( 59): nextRestorePackage() = @pm@
V/LocalTransport( 59): getRestoreData() found 7 key files
V/LocalTransport( 59): ... key=com.android.providers.settings size=1208
V/LocalTransport( 59): ... key=com.myapp size=501
V/LocalTransport( 59): ... key=android size=1208
V/LocalTransport( 59): ... key=com.android.providers.userdictionary size=1208
V/LocalTransport( 59): ... key=com.android.browser size=1208
V/LocalTransport( 59): ... key=com.android.inputmethod.latin size=1208
V/LocalTransport( 59): ... key=@meta@ size=11
V/LocalTransport( 59): no more packages to restore
V/LocalTransport( 59): finishRestore()
V/LocalTransport( 59): finishRestore()
D/AndroidRuntime( 8259): Shutting down VM
但我没有看到对onRestore的调用实际上已经完成(我刚刚开始时有一些日志记录语句?
这有没有发生在你身上? 没有任何理由通过onRestore方法调用,即使在onBackup
被调用?
根据我的经验,出于某种奇怪的原因(我尚未确定),在BackupAgents中创建的日志报表不会显示在日志中。 尽管如此,我已经能够确认OnRestore中的方法实际上是在正常运行。
在你的问题中,你指出onRestore方法“似乎没有被调用”,因为你无法看到正确的日志。 你能否确认结果是失败的(即应该正确恢复的数据不是)?
我有这个问题,根本原因是我的onBackup中有一个错误,阻止它完成,所以onBackup被调用,但onRestore不是。 修复导致调用rest的onBackup异常。
此外,在日志中还会显示onBackup和onRestore中的日志消息。 如果您在标记“备份”上设置日志过滤器,并使用备份内容作为日志标记。 你会看到从系统和你的日志。 这是我得到的
09-08 17:06:56.581 294-352/system_process V/BackupServiceBinder﹕ doBackup() invoked
09-08 17:06:56.591 294-352/system_process D/PerformBackupTask﹕ starting agent for backup of BackupRequest{pkg=android}
09-08 17:06:56.591 294-352/system_process D/BackupManagerService﹕ awaiting agent for ApplicationInfo{40d5efc0 android}
09-08 17:06:56.591 294-308/system_process D/BackupManagerService﹕ agentConnected pkg=android agent=android.app.backup.BackupAgent$BackupServiceBinder@4112a228
09-08 17:06:56.601 294-352/system_process V/BackupServiceBinder﹕ doBackup() invoked
09-08 17:06:56.601 294-352/system_process D/BackupHelperDispatcher﹕ handling existing helper 'wallpaper' android.app.backup.WallpaperBackupHelper@41149150
09-08 17:06:56.621 294-352/system_process D/PerformBackupTask﹕ starting agent for backup of BackupRequest{pkg=com.catglo.sellpr}
09-08 17:06:56.661 294-352/system_process D/BackupManagerService﹕ awaiting agent for ApplicationInfo{41074748 com.catglo.sellpr}
09-08 17:06:56.781 294-514/system_process D/BackupManagerService﹕ agentConnected pkg=com.catglo.sellpr agent=android.os.BinderProxy@410768c8
09-08 17:06:56.791 2263-2274/com.catglo.sellpr V/BackupServiceBinder﹕ doBackup() invoked
09-08 17:06:56.791 2263-2274/com.catglo.sellpr I/backup﹕ onBackup called
09-08 17:06:57.251 294-352/system_process I/PerformBackupTask﹕ Backup pass finished.
在上面的日志com.catglo.sellpr是从我的应用程序和读取com.catglo.sellpr I / backup:onBackup调用的行是我的代码中的日志消息。 对于我得到的onRestore
09-08 17:13:34.431 294-352/system_process D/BackupManagerService﹕ MSG_RUN_RESTORE observer=android.app.backup.IRestoreObserver$Stub$Proxy@413132c0
09-08 17:13:34.511 294-352/system_process V/BackupServiceBinder﹕ doRestore() invoked
09-08 17:13:34.561 294-352/system_process D/BackupManagerService﹕ awaiting agent for ApplicationInfo{41074748 com.catglo.sellpr}
09-08 17:13:34.561 294-427/system_process D/BackupManagerService﹕ agentConnected pkg=com.catglo.sellpr agent=android.os.BinderProxy@41127ee0
09-08 17:13:34.571 2263-2276/com.catglo.sellpr V/BackupServiceBinder﹕ doRestore() invoked
09-08 17:13:34.571 2263-2276/com.catglo.sellpr I/backup﹕ onRestore called
早些时候,我在onBackup上发生了异常,我的onRestore日志从未被调用过,但与恢复相关的系统消息是。
由于备份中的异常,应用程序不会强制关闭。
链接地址: http://www.djcxy.com/p/25483.html