2012-01-19 3 views
20

내 Android 앱에 백업 및 복원 할 데이터가 있습니다. 이를 위해 BackupAgent의 맞춤 구현을 만들었습니다. 백업 에이전트를 포함 한 내 매니페스트에서내 BackupAgent에 대해 onRestore가 호출되지 않았습니다.

을 내가 에뮬레이터 (안드로이드 2.2)을 테스트하고 있지만 당신은 내가 백업 서비스 API 키를 포함했다

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

아래에 볼 수 있으며, 그것은 안로 왜냐하면 로컬 백업 전송을 사용하기 때문입니다. 내 응용 프로그램이 설치되어

    에뮬레이터를 시작
  • : 백업의 테스트를 다음과 같은 I 짓을 복원하기 위해

    . 백업을

    ADB 쉘을 사용 bmgr 사실

  • 전화 내 코드의 일부를 사용

  • 은 BackupManager 클래스의 dataChanged 방법이라고했다.

  • 는 백업 작업을 수동으로

  • 내 사용자 BackupAgent의 onBackup 메소드가 호출되었다는 로그에 검사 실행 bmgr

    ADB 쉘을 시작합니다.

  • 제거 응용 프로그램
  • 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 [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에 대한 호출이 실제로 좀 로깅 문이 (이루어지는 것이 표시되지 않는 이유는 무엇입니까?

이런 일이 있었던 적이 있습니까? onBackup이 호출 된 경우에도 onRestore 메소드가 호출되지 않은 이유가 있습니까?

+2

나는 삼성 갤럭시 넥서스라는 적절한 전화로도 시도했다. 다음 링크에 설명 된대로 백업을 사용하도록 설정했는지 확인했습니다. http://support.verizonwireless.com/clc/devices/knowledge_base.html?id=51309 로그에이 내용이 표시됩니다. 'W/BackupManagerService (196) : 백업 패스이지만 e = true p = false'는 활성화되었지만 준비되지 않았 음을 의미합니다. 왜 제공되지 않는가? – mollymay

+1

오늘이 문제가 발생했습니다. onBackup은 예외없이 성공적으로 호출되었지만 재설치 된 앱에서는 onRestore가 호출되지 않습니다. 이유를 찾았습니까? 감사! – Loc

답변

1

내 경험에 의하면, 어떤 이상한 이유로 아직 식별하지 못했습니다), BackupAgent에서 작성된 로깅 구문은 로그에 표시되지 않습니다. 그럼에도 불구하고 실제로 onRestore 메서드 이 제대로 실행되는지 확인할 수있었습니다.

적절한 로그를 볼 수 없기 때문에 onRestore 메서드가 "호출되지 않은 것 같습니다."라는 메시지가 표시됩니다. 대신 결과가 실패했는지 (즉, 올바르게 복원해야하는 데이터가 아닌지) 확인할 수 있습니까?

+0

참. 나는 OP가 이것을 확인하고 돌아 가야한다고 생각합니다. –

+0

내 경험에 의하면, 안드로이드 5에서 로깅 문은 호출되지만 디버그 중단 점이 발생하지 않습니다. 디버거가 연결되기 전에 복원 프로세스가 실행되는 것 같습니다. 그러면 앱을 테스트 할 때 어떤 일이 일어나고 있는지 혼란 스러울 수 있습니다. – arlomedia

1

이 문제가있어서 근본적인 원인은 내 onBackup에서 버그가 발생하여 완료되지 못하게되어 onBackup이 호출되었지만 onRestore가 아니었기 때문입니다.onBackup에서 예외를 수정하면 onRestore가 호출되었습니다.

또한 onBackup 및 onRestore의 로그 메시지가 로그에 표시됩니다. 태그 "백업"에 로그 필터를 설정하고 백업 태그가있는 태그를 로그 태그로 사용하는 경우 시스템과 사용자의 로깅을 볼 수 있습니다. 여기에 내가 com.catglo.sellpr 내 응용 프로그램에서입니다 위의 로그와 com.catglo.sellpr I/백업을 읽어 줄에

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 [email protected]8 
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' [email protected] 
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 [email protected] 
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. 

을 얻을 것입니다 : onBackup이라고 내 코드에서 로그 메시지 . onRestore 위해 나는

09-08 17:13:34.431  294-352/system_process D/BackupManagerService﹕ MSG_RUN_RESTORE [email protected] 
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 [email protected] 
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 

이전 내가 onBackup에서 예외를했고 onRestore에서 내 로그가 호출되지하지만 복원 관련 시스템 메시지가 있었다 않았다 얻을.

백업의 예외로 인해 응용 프로그램이 강제 종료되지 않습니다.