Androidデータストレージ-ファイルとSQLite
質問
定期的に外部サーバーに情報を送信するアプリケーションを開発しています。バックアップのために、送信されるデータのローカルコピーを作成します。
データを保存するための最適なオプションは何ですかバッテリー寿命を節約するという点で?各データ送信は、約5K〜10Kのシリアル化されたオブジェクトです(クラスには、日付、数字、文字列を含む5つのフィールドがあります)。
他のアイデア?
解決
バッテリーの寿命については直接知りませんが、管理しやすい基準はどれですか?データを管理する操作が少なくなると、CPUサイクルが少なくなり、バッテリー寿命が長くなります。
SQLiteオプションの方が簡単だと思います。データを保存するSQLiteテーブルに日付列を配置することができます。これにより、不要な古い送信を削除でき、すべてがネイティブSQLライブラリを介して処理されます。独自のJavaコードを使用して、ファイル全体の負荷(さらに悪い場合は単一のファイル)を管理するのは、はるかに手間がかかります。
さらに、データをデータベースに書き込むことができますが、データを再度読み取る必要があるまでは忘れてください。ファイルにデータを保存している場合、 Androidアプリケーションのライフサイクル。バッテリーが心配な場合は、必要以上に頻繁にファイルを書き込みたり、メモリにデータをキャッシュしたりすることはおそらくないでしょうが、アプリが一時停止または破棄されたときにデータが失われないことを確認する必要があります。私の意見では、SQLiteデータベースを使用する方がはるかに簡単で、これについて心配する必要はありません。
他のヒント
SQLiteデータベースは単にシステム上のファイル(/data/data/<your_package>/databases/
に格納されている)であるため、SQLiteを使用するかファイルを使用するかは重要ではないと思います。適切なタイミングでファイルをハードドライブに保存する必要があるのと同じように、適切なタイミングでdbにコミットする必要があります。つまり、どちらの方法でも、同じくらい多くのハードドライブ書き込みを使用できます。
選択する内容は、保存するデータの種類により左右されると思います。データベースが持つことができる能力(クエリなど)が必要な場合は、必ずSQLiteを使用してください。ただし、dbが不要な場合、または大幅に変化する(リレーショナルデータベースで簡単に設定できない)データがある場合は、ファイルを使用します。
確実に言えることは、ファイルの保存にシリアル化を使用しない を選択する必要があるということです。 Androidのシリアル化は遅く、遅く、遅く、大きなファイルを作成します。パフォーマンス上の理由から、独自のXML形式またはJSON形式を記述する方がはるかに優れています。
アプリケーションはマルチスレッドですか?データストアにアクセスする複数のスレッドがある場合は、SQLiteを使用します。 SQLiteにロックの問題を心配させます。