我在我的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" />
尽管我正在使用模拟器(Android 2.2),而且它应该不必要,因为它使用本地备份传输,但我已经包含了备份服务api密钥。
为了测试备份和恢复,我已经执行了以下操作:
- 启动已安装我的应用程序的模拟器。
启用备份
adb shell bmgr enable true
调用我的代码部分,其中BackupManager类中的dataChanged方法被调用。
手动启动备份操作
adb shell bmgr run
在日志中检查自定义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方法已被调用?