1

私はAndroidアプリケーションを書いています。

  1. バックグラウンド サービス 1。一定の間隔でセンサー値を読み取ります (たとえば、プログラムは 5 分ごとに 30 秒間センサー値を読み取り、測定期間中は 1 秒あたり 2 回値が読み取られます)。
  2. センサー値を分析し、それらからいくつかのメトリックを計算するバックグラウンド サービス 2、
  3. バックグラウンド サービス 3。3 ~ 7 日に 1 回実行され、データベースから古いデータ (センサー値とメトリックの両方) が削除されます。
  4. ユーザーがアプリケーションを開いて何らかのボタンを押すと、センサーの値やメトリックの一部が表示される GUI アクティビティ。

と の2 つのテーブルがありSensorDataますMetrics。バックグラウンド サービス 1 は に書き込みSensorDataます。バックグラウンド サービス 2 は からSensorData読み書きしMetricsます。バックグラウンド サービス 3 は、両方のテーブルから行を削除します。GUI アクティビティは、両方のテーブルから読み取ります。

センサーの値とメトリック用にスレッドセーフなストレージを実装する方法を考えていました。

明らかな解決策は、組み込みの SQLite データベースを使用することです。

次の質問があります。

  1. この設定で安全に使用できますか?
  2. Android の SQLite は 2 つの数値 (longdouble) の書き込みを 1 秒あたり 2 回処理しますか?
  3. 同時アクセスをサポートしていますか (GUI アクティビティがクエリを発行しSensorData、バックグラウンド サービス 1 が同じテーブルに同時に書き込もうとするとどうなりますか) ?
4

1 に答える 1

2
  1. SQLiteOpenHelperをシングルトンとして使用することで、スレッドセーフになります。SQLiteOpenHelpersqlite データベースのロックを処理します (これは、同時読み取り/書き込みを処理する sqlite メカニズムです)。
  2. これはテストするものです。しかし、一般的に言えば、データベースに頻繁に書き込む必要がありますか? データをメモリにキャッシュし、低速でデータベースにフラッシュできます。
  3. 簡単な答えは「はい、同時アクセスをサポートしています」です。詳細については、このsqlite ドキュメントを確認してください。android sqlite はこれの単なるラッパーです。このドキュメントを読んだ後に適切と思われる方法で動作するように構成できます。
于 2013-06-19T19:24:03.850 に答える