私のアプリは、すべてのユーザー データと設定を SQLite データベースに保存します。これは、ユーザーが新しい電話を入手したり、再インストールしたり、出荷時設定にリセットしたりした場合に保持したいと考えています。Android の Data Backup GuideとそのAndroid Backup Serviceを読みましたが、始める前にまだいくつか質問があります。
- アプリのインストール時または初回起動時にデータは復元されますか? つまり、メイン アクティビティのコードが呼び出される前に、ファイルは存在しますか?
- SQLiteOpenHelper クラスが既にアップグレードを処理している場合、古いデータベースの復元を処理するために他に何かしなければならないことはありますか? アプリが起動される前にデータベースが存在する場合、そうではないと思います。
- BackupManager に時間がかかるため、バックアップ時に同時実行の問題に直面することはありますか? ユーザーが新しいデータを入力して呼び出し
dataChanged()
た後、BackupManager が呼び出す前に同じことが再び発生した場合、onBackup()
これらのデータの変更はどのように処理されますか? BackupManager はデータベースの最新バージョン (両方の変更を含む必要があります) を単純にバックアップしますか? - SQLite データベースをバックアップ/復元しようとすると、どのような問題が発生しますか? 開発者が、あるデバイスのデータベースは別のデバイスのデータベースと互換性がない可能性があると言っているのを見てきました。
FileBackupHelper
を使用してデータベースを簡単にバックアップしたいと思います。少なくとも 1 人の開発者が、Write Ahead Logging を無効にすることで、少なくともいくつかの互換性の問題を解決したようです。このアプローチを採用した場合、どの程度の失敗率が予想されるでしょうか? 非常に高い場合は、プロセス中に CSV ファイルに変換して元に戻すことを検討する可能性があります。 - 復元に失敗した場合、それをキャッチしてユーザーに通知し、問題のあるデータのコピーをストレージに保存できますか? トラブルシューティングとユーザーへの通知のため。
- バックアップ操作は「スレッドセーフではありません」。扱い方を明確にする。 アンドロイド曰く、
バックアップ エージェントがアクティビティと同時にファイルの読み取りまたは書き込みを行わないようにするには、読み取りまたは書き込みを実行するたびに同期ステートメントを使用する必要があります。
- これは、データベースへのすべての読み取り/書き込みを
synchronized
ステートメント内に配置する必要があるということですか? つまり、アクティビティがデータベースからロードするすべての場所にこれを追加するか、情報を書き込む必要がありますか? それはたくさんの場所です。 - それとも、バックアップコードのみが使用する必要があるということ
synchronized
ですか?
助けてくれてありがとう。私はこれを正しく行い、ユーザーが今年のクリスマスに新しい携帯電話を手に入れたときに満足してもらいたいだけです!