BackupAgentHelper: onRestore не вызывается
Я установил пример BackupRestore по этой ссылке.
Я не могу восстановить данные.
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 ответ
После проверки логов я заметил сообщение:
I / Backup: [KeyValueRateLimiter] резервное копирование K/V для [пакета] прервано ограничителем скорости. следующий =1519165401410, текущий =1519088429345
Это означает, что резервные копии не создаются до 20.02.2008, 17:23:21. Для резервных копий с помощью Google Transport существует ограничение скорости, поэтому я собираюсь попробовать Local Transport без ограничения скорости.
Обновление: переключение на локальный транспорт, кажется, работает. Он смог восстановить значения после удаления / переустановки приложения на моем устройстве.
Вот что я сделал, чтобы заставить его работать:
- Скопируйте исходные файлы из проекта BackupRestore в новый проект.
- Создайте резервный ключ для файла манифеста на этом веб-сайте: https://developer.android.com/google/backup/signup.html
- Запустите adb shell bmgr list транспорты, чтобы увидеть транспорты.
- Запустите adb shell bmgr transport android/com.android.internal.backup.LocalTransport, чтобы изменить транспорт на Локальный (транспорт Google наложит ограничение скорости)
- Запустите adb shell bmgr backup [package] - для резервного копирования приложения
- Запустите adb shell dumpsys backup, чтобы увидеть ожидающие файлы резервных копий.
adb shell bmgr run
adb uninstall [имя пакета]
adb install -t [apk file] (для отладки я использовал -t)
Убедитесь, что значения были восстановлены во время установки.
- Вы также можете нажать кнопку Восстановить последние данные, и событие OnRestore сработает, последняя резервная копия будет восстановлена.
Я боролся с этим. Я надеюсь, что это помогает кому-то.