В моем приложении для 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" />
Я включил ключ API службы резервного копирования, хотя я тестирую с эмулятором (Android 2.2), и в этом нет необходимости, поскольку он использует локальный транспорт для резервного копирования.
Чтобы выполнить тест резервного копирования и восстановления, я сделал следующее:
- Запустите эмулятор с моим приложением.
Включить резервное копирование
adb shell bmgr enable true
Вызовите часть моего кода, где вызывается метод dataChanged в классе BackupManager.
Запуск операции резервного копирования вручную
adb shell bmgr run
В журнале проверено, что был вызван метод onBackup моего пользовательского BackupAgent.
- Удалить приложение
- Переустановите приложение
- Проверьте в журнале, вызывается ли метод 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
вызывается?