BackupAgentHelper
제공된 FileBackupHelper
기본 데이터베이스를 백업하고 복원하기 위해 제공된 사용 을 구현했습니다 . 일반적으로 함께 사용 ContentProviders
하고에 상주 하는 데이터베이스 입니다 /data/data/yourpackage/databases/
.
이것은 일반적인 경우라고 생각할 것입니다. 그러나 문서는 http://developer.android.com/guide/topics/data/backup.html 에서 무엇을 해야할지 명확하지 않습니다 . 이러한 일반적인 데이터베이스에 대한 특별한 것은 없습니다 BackupHelper
. 따라서를 사용하고FileBackupHelper
" /databases/
"의 .db 파일을 가리키고, 내에서 모든 db 작업 (예 :)에 대한 잠금을 도입 db.insert
했으며 ContentProviders
, 설치 후에는 존재하지 않기 때문에 /databases/
이전에 " "디렉토리를 만들려고 onRestore()
했습니다.
SharedPreferences
과거에 다른 앱에서 성공적으로 유사한 솔루션을 구현했습니다 . 그러나 에뮬레이터 2.2에서 새 구현을 테스트 할 때 LocalTransport
로그에서 백업이 수행 되고 복원이 수행되고 onRestore()
호출 되는 것을 볼 수 있습니다. 그러나 db 파일 자체는 생성되지 않습니다.
이것은 모두 설치 후와 앱을 처음 실행하기 전, 복원이 수행 된 후입니다. 그 외에도 내 테스트 전략은 http://developer.android.com/guide/topics/data/backup.html#Testing 기반이었습니다 .
또한 내가 직접 관리하는 sqlite 데이터베이스에 대해 이야기하지 않으며 SDcard, 자체 서버 또는 다른 곳에 백업하는 것에 대해서도 이야기하지 않습니다.
사용자 지정 사용을 권장하는 데이터베이스에 대한 문서에서 언급을 BackupAgent
보았지만 관련이없는 것 같습니다.
그러나 다음과 같은 경우 BackupAgent를 직접 확장 할 수 있습니다. * 데이터베이스의 데이터를 백업합니다. 사용자가 애플리케이션을 다시 설치할 때 복원하려는 SQLite 데이터베이스가있는 경우 백업 작업 중에 적절한 데이터를 읽는 사용자 지정 BackupAgent를 빌드 한 다음 복원 작업 중에 테이블을 만들고 데이터를 삽입해야합니다.
좀 명확하게 부탁드립니다.
SQL 수준까지 직접 수행해야하는 경우 다음 항목이 걱정됩니다.
데이터베이스 및 트랜잭션을 엽니 다. 내 앱의 워크 플로 외부의 단일 클래스에서 닫는 방법을 모릅니다.
백업이 진행 중이고 데이터베이스가 잠겨 있음을 사용자에게 알리는 방법. 시간이 오래 걸릴 수 있으므로 진행률 표시 줄을 표시해야 할 수 있습니다.
복원시 동일한 작업을 수행하는 방법. 내가 이해했듯이 복원은 사용자가 이미 앱을 사용하고 데이터베이스에 데이터를 입력하기 시작했을 때 발생할 수 있습니다. 따라서 백업 된 데이터를 제자리에 복원한다고 가정 할 수 없습니다 (빈 데이터 나 오래된 데이터 삭제). 당신은 어떻게 든 그것에 가입해야 할 것입니다. ID 때문에 사소하지 않은 데이터베이스는 불가능합니다.
복원이 완료된 후 사용자가 도달 할 수없는 지점에서 멈추지 않고 앱을 새로 고치는 방법.
백업 또는 복원시 데이터베이스가 이미 업그레이드되었는지 확인할 수 있습니까? 그렇지 않으면 예상 스키마가 일치하지 않을 수 있습니다.