BackupAgentHelper
提供されているを使用して、所有しFileBackupHelper
ているネイティブデータベースをバックアップおよび復元するように実装しました。これは、通常一緒に使用するデータベースでContentProviders
あり、に存在し/data/data/yourpackage/databases/
ます。
これは一般的なケースだと思うでしょう。ただし、ドキュメントでは何をすべきかが明確ではありません:http: //developer.android.com/guide/topics/data/backup.html。これらの典型的なデータベースには特にありません。BackupHelper
したがって、を使用しFileBackupHelper
、 ""の.dbファイルをポイントし、/databases/
のdb操作(などdb.insert
)の周りにロックを導入し、インストール後に存在しないため、以前に""ディレクトリContentProviders
を作成しようとしました。/databases/
onRestore()
SharedPreferences
私は過去に別のアプリで成功するために同様のソリューションを実装しました。ただし、emulator-2.2で新しい実装をテストするとLocalTransport
、ログからのバックアップが実行されていることと、復元が実行されている(およびonRestore()
呼び出されている)ことがわかります。ただし、dbファイル自体は作成されません。
これはすべて、インストール後、アプリの最初の起動前、復元の実行後であることに注意してください。それとは別に、私のテスト戦略はhttp://developer.android.com/guide/topics/data/backup.html#Testingに基づいていました。
また、自分で管理しているsqliteデータベースについても、SDカードや独自のサーバーなどへのバックアップについても話していません。
カスタムを使用するようにアドバイスしているデータベースについての言及をドキュメントで見ましたBackupAgent
が、それは関連していないようです:
ただし、次のことが必要な場合は、BackupAgentを直接拡張することをお勧めします。*データベース内のデータをバックアップします。ユーザーがアプリケーションを再インストールするときに復元するSQLiteデータベースがある場合は、バックアップ操作中に適切なデータを読み取るカスタムBackupAgentを構築し、テーブルを作成して復元操作中にデータを挿入する必要があります。
少し明確にしてください。
SQLレベルまで自分でそれを行う必要がある場合は、次のトピックについて心配しています。
データベースとトランザクションを開きます。アプリのワークフローの外で、このようなシングルトンクラスからそれらを閉じる方法がわかりません。
バックアップが進行中であり、データベースがロックされていることをユーザーに通知する方法。時間がかかる場合があるので、プログレスバーを表示する必要があるかもしれません。
復元時に同じことを行う方法。私が理解しているように、復元は、ユーザーがすでにアプリの使用を開始したとき(およびデータベースにデータを入力したとき)に発生する可能性があります。したがって、バックアップされたデータを元の場所に復元する(空のデータまたは古いデータを削除する)とは限りません。どういうわけかそれに参加する必要がありますが、IDが原因で、重要なデータベースでは不可能です。
復元が完了した後、ユーザーが到達不能な時点で立ち往生することなくアプリを更新する方法。
データベースがバックアップまたは復元時にすでにアップグレードされていることを確認できますか?そうしないと、期待されるスキーマが一致しない可能性があります。