sesion linea iniciar cuenta crear android backup restore android-backup-service

android - linea - onRestore no se invoca para mi Agente de copia de seguridad personalizado



shazam sign (2)

En mi experiencia, por alguna extraña razón (que aún no he identificado), las declaraciones de registro realizadas en los Agentes de copia de seguridad no aparecen en los registros. No obstante, he podido confirmar que el método onRestore se ejecuta correctamente.

En su pregunta, indica que el método onRestore "no parece ser llamado" porque no puede ver los registros adecuados. ¿Puede en cambio confirmar que el resultado está fallando (es decir, que los datos que deben restaurarse correctamente no lo están)?

Hay algunos datos en mi aplicación de Android que me gustaría respaldar y restaurar. Para ello he creado una implementación personalizada de BackupAgent .

En mi manifiesto, he incluido el agente de copia de seguridad como se puede ver a continuación.

<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" />

He incluido la clave api del servicio de copia de seguridad, aunque estoy probando con el emulador (Android 2.2) y no debería ser necesario, ya que utiliza el transporte de copia de seguridad local.

Para hacer la prueba de la copia de seguridad y restauración he hecho lo siguiente:

  • Iniciar el emulador con mi aplicación instalada.
  • Habilitar copia de seguridad

    adb shell bmgr enable true

  • Llamar a la parte de mi código donde se llama al método dataChanged en la clase BackupManager.

  • Iniciar manualmente la operación de copia de seguridad.

    adb shell bmgr ejecutar

  • Verifiqué en el registro que se llamó al método onBackup de mi BackupAgent personalizado.

  • Desinstalar la aplicación
  • Reinstalar la aplicación
  • Verifique en el registro si se llama al método onRestore.

La cosa es que el método onRestore no parece ser llamado y no sé por qué. Después de reinstalar la aplicación o de activar manualmente la restauración con adb, veo lo siguiente en la consola.

$adb shell bmgr restore com.myapp restoreStarting: 2 packages restoreFinished: 0 done

Y este otro en el registro.

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

pero no veo que la llamada a onRestore se haga realmente (¿tengo algunas declaraciones de registro justo al principio?

¿Te ha pasado esto alguna vez? ¿Hay algún motivo por el que el método onRestore no se llame, incluso onBackup se llamó a onBackup ?


Tenía este problema y la causa principal era que tenía un error en mi onBackup que impedía que se completara, por lo que se llamó a onBackup pero no a onRestore. Arreglar la excepción en onBackup hizo que se llamara onRestore.

También los mensajes de registro en onBackup y onRestore aparecen en los registros. Si configura un filtro de registro en la etiqueta "copia de seguridad" y utiliza algo con copia de seguridad para su etiqueta de registro. Verás el registro del sistema y el tuyo. Esto es lo que obtengo

09-08 17:06:56.581 294-352/system_process V/BackupServiceBinder﹕ doBackup() invoked 09-08 17:06:56.591 294-352/system_process D/PerformBackupTask﹕ starting agent for backup of BackupRequest{pkg=android} 09-08 17:06:56.591 294-352/system_process D/BackupManagerService﹕ awaiting agent for ApplicationInfo{40d5efc0 android} 09-08 17:06:56.591 294-308/system_process D/BackupManagerService﹕ agentConnected pkg=android agent=android.app.backup.BackupAgent$BackupServiceBinder@4112a228 09-08 17:06:56.601 294-352/system_process V/BackupServiceBinder﹕ doBackup() invoked 09-08 17:06:56.601 294-352/system_process D/BackupHelperDispatcher﹕ handling existing helper ''wallpaper'' android.app.backup.WallpaperBackupHelper@41149150 09-08 17:06:56.621 294-352/system_process D/PerformBackupTask﹕ starting agent for backup of BackupRequest{pkg=com.catglo.sellpr} 09-08 17:06:56.661 294-352/system_process D/BackupManagerService﹕ awaiting agent for ApplicationInfo{41074748 com.catglo.sellpr} 09-08 17:06:56.781 294-514/system_process D/BackupManagerService﹕ agentConnected pkg=com.catglo.sellpr agent=android.os.BinderProxy@410768c8 09-08 17:06:56.791 2263-2274/com.catglo.sellpr V/BackupServiceBinder﹕ doBackup() invoked 09-08 17:06:56.791 2263-2274/com.catglo.sellpr I/backup﹕ onBackup called 09-08 17:06:57.251 294-352/system_process I/PerformBackupTask﹕ Backup pass finished.

en el registro anterior com.catglo.sellpr es de mi aplicación y la línea que lee com.catglo.sellpr I / backup ﹕ onBackup llamado es el mensaje de registro en mi código. Para el onRestore consigo

09-08 17:13:34.431 294-352/system_process D/BackupManagerService﹕ MSG_RUN_RESTORE observer=android.app.backup.IRestoreObserver$Stub$Proxy@413132c0 09-08 17:13:34.511 294-352/system_process V/BackupServiceBinder﹕ doRestore() invoked 09-08 17:13:34.561 294-352/system_process D/BackupManagerService﹕ awaiting agent for ApplicationInfo{41074748 com.catglo.sellpr} 09-08 17:13:34.561 294-427/system_process D/BackupManagerService﹕ agentConnected pkg=com.catglo.sellpr agent=android.os.BinderProxy@41127ee0 09-08 17:13:34.571 2263-2276/com.catglo.sellpr V/BackupServiceBinder﹕ doRestore() invoked 09-08 17:13:34.571 2263-2276/com.catglo.sellpr I/backup﹕ onRestore called

Anteriormente tuve una excepción en onBackup y nunca se llamó a mi registro de onRestore, pero sí los mensajes del sistema relacionados con la restauración.

La aplicación no forzará el cierre debido a una excepción en la copia de seguridad.