BackupAgentHelper:onRestore没有被调用

时间:2018-02-19 19:59:50

标签: android android-backup-service backup-agent

我从此链接安装了示例BackupRestore。

https://android.googlesource.com/platform/development/+/0b3758ea4e53f9bfd0b112eaa4a7dd7b7f4040f5/samples/BackupRestore?autodive=0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F

我无法恢复数据。

OnBackup和OnCreate被调用,但OnRestore没有。

我可以备份:OnCreate和OnBackup受到攻击,但OnRestore没有。

@Override
public void onRestore(BackupDataInput data, int appVersionCode,
                      ParcelFileDescriptor newState) throws IOException {
    // Hold the lock while the FileBackupHelper restores the file from
    // the data provided here.
    synchronized (BackupRestoreActivity.sDataLock) {
        super.onRestore(data, appVersionCode, newState);
    }
}



   public void onRestoreButtonClick(View v) {
        Log.v(TAG, "Requesting restore of our most recent data");
        mBackupManager.requestRestore(
                new RestoreObserver() {
                    public void restoreFinished(int error) {
                        /** Done with the restore!  Now draw the new state of our data */
                        Log.v(TAG, "Restore finished, error = " + error);
                        populateUI();
                    }
                }
        );
    }

我尝试过使用adb工具(除了requestRestore),但它也没有用。

adb shell bmgr restore [package]
adb uninstall [apkfile]
adb  install [apkfile]

当我运行恢复时,我得到:

restoreStarting: 1 packages
restoreFinished: 0
done

但是OnRestore没有被击中,数据也没有恢复。

我正在使用Android Studio 3.0。我花了很多时间在这上面。任何人都能解释一下吗?

1 个答案:

答案 0 :(得分:1)

检查完日志后,我发现了一条消息:

I / Backup:[KeyValueRateLimiter] [包]的K / V备份由速率限制器中止。 next = 1519165401410,current = 1519088429345

这意味着直到2/20/2018,5:23:21 PM才会进行备份。使用Google Transport进行备份的速率限制,因此我将尝试使用没有速率限制的本地传输。

更新:切换到本地传输似乎有效。在我的设备上卸载/重新安装应用后,它能够恢复值。

这是我为了让它发挥作用所做的:

  • 将源文件从BackupRestore项目复制到新项目中。
  • 从此网站生成清单文件的备份密钥:https://developer.android.com/google/backup/signup.html
  • 运行 adb shell bmgr list transports 以查看传输。
  • 运行 adb shell bmgr transport android / com.android.internal.backup.LocalTransport 将传输更改为Local(Google传输将强制设置速率限制)
  • 运行adb shell bmgr backup [package] - 备份应用程序
  • 运行 adb shell dumpsys backup 以查看待处理的备份文件
  • adb shell bmgr run

  • adb uninstall [包名]

  • adb install -t [apk文件](用于调试我用过-t)

  • 检查安装期间是否恢复了值。

  • 您还可以单击“恢复上次数据”按钮,将触发OnRestore事件,将恢复上次备份。

我为此苦苦挣扎。我希望这有助于某人。