【发布时间】:2012-02-14 06:23:40
【问题描述】:
我想要备份和恢复我的 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 方法,请查看日志。
问题是 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被调用了?
【问题讨论】:
-
我刚刚也尝试过使用合适的手机,三星 Galaxy Nexus。我已经确定我已启用备份,正如以下链接中所述:support.verizonwireless.com/clc/devices/… 并且我在日志
W/BackupManagerService( 196): Backup pass but e=true p=false中看到了这一点,这意味着已启用但未配置。为什么没有配置? -
我今天遇到了这个问题。 onBackup 无异常调用成功,但重新安装应用时未调用 onRestore。你找出原因了吗?谢谢!
标签: android backup restore android-backup-service