onRestore没有为我的自定义BackupAgent调用

mol*_*may 21 backup android restore android-backup-service

我的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" />
Run Code Online (Sandbox Code Playgroud)

我已经包含了备份服务api密钥,虽然我正在使用模拟器(Android 2.2)进行测试,但它并不是必需的,因为它使用本地备份传输.

为了进行备份和恢复的测试,我已经完成了以下操作:

  • 安装我的应用程序启动模拟器.
  • 启用备份

    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
Run Code Online (Sandbox Code Playgroud)

和另一个在日志中

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
Run Code Online (Sandbox Code Playgroud)

但我没有看到onRestore的调用实际上已经发出(我刚开始时有一些日志语句?

这件事发生在你身上吗?是否有任何理由被onRestore方法调用,即使在onBackup被调用时?

yyd*_*ydl 1

根据我的经验,由于某些奇怪的原因(我尚未确定),在 BackupAgents 中生成的日志语句不会显示在日志中。尽管如此,我已经能够确认 onRestore 方法实际上正确运行。

在您的问题中,您指出 onRestore 方法“似乎没有被调用”,因为您无法看到正确的日志。您能否确认结果失败(即应该正确恢复的数据没有失败)?