2016-04-22 8 views
1

私は毎秒値を受信するBluetoothサービスと、10秒ごとに位置情報を受信するGPSサービスを持っています。これらのデータはすべてデータベースに保存する必要があります。これらの2つのサービスが同時にデータベースに書き込もうとするのを避けるために、私はデータベースサービスを作成してそれらのデータを保存しました:ブルートゥースとGPSサービスはその値をこのサービスにブロードキャストで送り、このサービスはそれらを保管します。私はいくつかの質問があります:BroadcastReceiverを受信できるインテントの数はいくつですか?

- 私のデータベースを受信できるブロードキャスト数は何回ですか? (ブロードキャストレシーバを使用) - データベースサービスが新しい値を受け取ったが、以前の時刻を格納していない場合はどうなりますか?

+0

私は1秒間に受信できる放送の数についてはわかりませんが、2番目の質問では最も簡単なのはおそらくイベントのための 'Queue'でしょう。 dbはイベントを受け取るたびに、そのイベントをキューに入れます。その後、バックグラウンドで実行されるスレッドを持ち、要素を1つずつ挿入する 'Queue'を扱います。この方法では、保存したい情報が失われず、各要素が受け取った順序と同じ順序で挿入されるようにします。 – NSimon

答えて

0

ContentProvider実装でデータベースをラップします。通常は、アプリケーションの外部にデータを公開できるようにするために使用されますが、構造化データにアクセスするための中心的で十分に文書化されたAPIも提供します。コンテンツプロバイダのメソッド内でデータベースへのアクセスを保護することができます(、delete()など)。ContentResolverプロバイダーにアクセスするための最初の使用は、コンテキストスイッチの最大のヒットです。その後、シーンの背後のバインダー接続が短絡し、同じプロセス内に留まります。

Intentを送信すると、システムはsystem_serverプロセスで動作するActivityManagerServiceと通信する必要があります。このコンテキストスイッチは、必要のない余分なオーバーヘッドであり、避けることができます。さらに、キューが不要です。プロバイダの実装内でデータベースアクセスを保護するだけです。

+0

データベースは保護され、書き込み可能なサービスは1つだけです。しかし、別のサービスが書き込もうとすると、要求は拒否されるか、サービスは待機しますか? あなたの答えをありがとう。 – Gabriel

+0

申し訳ありませんが、私はあなたが何を求めているのか分かりません。おそらく、2つのサービスを使用することは、必要以上に複雑です。 –

+0

私の悪い英語に申し訳ありません 私は2つのサービスを持っています:1つはBluetooth用、もう1つはGPS/stepcounter用、もう1つはデータベースに書き込む必要があります。 私が理解していれば、2つのサービスが同時に書き込もうとしても、コンテンツプロバイダは常にデータベースを保護していますか? 私の質問は、BluetoothServiceが書き込みをしていて、GPSサービスが書きたいと思っていれば、データベースは理解できれば保護されますが、どうなりますか? GPSサービスは、最初の書き込みが完了するか、書き込まれなくなるまで待機します(GPSは書き込みを再試行する必要があります)。 – Gabriel