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

标签 android backup restore android-backup-service

我想要备份和恢复我的 Android 应用程序中的一些数据。为此,我创建了 BackupAgent 的自定义实现。

在我的 list 中包含了备份代理,如下所示

<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 key ,虽然我正在使用模拟器 (Android 2.2) 进行测试,但这不是必需的,因为它使用本地备份传输。

为了测试备份和恢复,我做了以下工作:

  • 在安装了我的应用程序后启动模拟器。
  • 启用备份

    adb shell bmgr enable 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被调用了?

最佳答案

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

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

关于android - 没有为我的自定义 BackupAgent 调用 onRestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928669/

相关文章:

java - 从 Fragment Force 启动 Activity 会关闭应用程序

postgresql - Postgres 触发器将在删除行之前将行插入到另一个表中

batch-file - 有人可以向我解释这个备份脚本吗?

sql-server - SQL 恢复恢复;卡在 100%

sql-server - 如何恢复文件在另一台机器上的sql server备份?

android - MonoDroid : Fragment. 实例化 ClassNotFoundException

android - 使用加载指示在我的 ListView 中设置适配器

svn - 如何将 SVN 存储库热复制到现有位置?

sql-server - 如何将我的备份恢复到不同的数据库?

java - Android布局问题: Unable to add two layouts of two charts using addView (logcat error included)