В моем приложении для 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
а другой - в log
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 [email protected]
V/LocalTransport( 59): start restore 1
V/LocalTransport( 59): nextRestorePackage() = @[email protected]
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): ... [email protected]@ 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
был вызван?