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