12

私のアプリは、すべてのユーザー データと設定を SQLite データベースに保存します。これは、ユーザーが新しい電話を入手したり、再インストールしたり、出荷時設定にリセットしたりした場合に保持したいと考えています。Android の Data Backup GuideとそのAndroid Backup Serviceを読みましたが、始める前にまだいくつか質問があります。

  1. アプリのインストール時または初回起動時にデータは復元されますか? つまり、メイン アクティビティのコードが呼び出される前に、ファイルは存在しますか?
  2. SQLiteOpenHelper クラスが既にアップグレードを処理している場合、古いデータベースの復元を処理するために他に何かしなければならないことはありますか? アプリが起動される前にデータベースが存在する場合、そうではないと思います。
  3. BackupManager に時間がかかるため、バックアップ時に同時実行の問題に直面することはありますか? ユーザーが新しいデータを入力して呼び出しdataChanged()た後、BackupManager が呼び出す前に同じことが再び発生した場合、onBackup()これらのデータの変更はどのように処理されますか? BackupManager はデータベースの最新バージョン (両方の変更を含む必要があります) を単純にバックアップしますか?
  4. SQLite データベースをバックアップ/復元しようとすると、どのような問題が発生しますか? 開発者が、あるデバイスのデータベースは別のデバイスのデータベースと互換性がない可能性があると言っているのを見てきました。FileBackupHelperを使用してデータベースを簡単にバックアップしたいと思います。少なくとも 1 人の開発者が、Write Ahead Logging を無効にすることで、少なくともいくつかの互換性の問題を解決したようです。このアプローチを採用した場合、どの程度の失敗率が予想されるでしょうか? 非常に高い場合は、プロセス中に CSV ファイルに変換して元に戻すことを検討する可能性があります。
  5. 復元に失敗した場合、それをキャッチしてユーザーに通知し、問題のあるデータのコピーをストレージに保存できますか? トラブルシューティングとユーザーへの通知のため。
  6. バックアップ操作は「スレッドセーフではありません」。扱い方を明確にする。 アンドロイド曰く、

バックアップ エージェントがアクティビティと同時にファイルの読み取りまたは書き込みを行わないようにするには、読み取りまたは書き込みを実行するたびに同期ステートメントを使用する必要があります。

  • これは、データベースへのすべての読み取り/書き込みをsynchronizedステートメント内に配置する必要があるということですか? つまり、アクティビティがデータベースからロードするすべての場所にこれを追加するか、情報を書き込む必要がありますか? それはたくさんの場所です。
  • それとも、バックアップコードのみが使用する必要があるということsynchronizedですか?

助けてくれてありがとう。私はこれを正しく行い、ユーザーが今年のクリスマスに新しい携帯電話を手に入れたときに満足してもらいたいだけです!

4

1 に答える 1

1

Androidのドキュメントから

これはあなたの1と2の質問に答えるはずです:

Android automatically performs a restore operation when your application is installed and there 
exists backup data associated with the user. The primary scenario in which backup data is restored 
is when a user resets their device or upgrades to a new device and their previously installed 
applications are re-installed.

3: インストール中にデータが復元されるため、同時実行の問題に直面することはないと思います

4:

Data backup is not guaranteed to be available on all Android-powered devices. However, your   
application is not adversely affected in the event that a device does not provide a backup 
transport. If you believe that users will benefit from data backup in your application, then you can 
implement it as described in this document, test it, then publish your application without any 
concern about which devices actually perform backup.

5:そうは思いません。

6: 「読み取りまたは書き込みを実行するたびに」は自明のようです。DBで操作を行うたびに

于 2014-11-25T11:26:03.323 に答える