私は高頻度でBLE通知からデータを受信し、画面にデータを印刷し、他の周辺機器にデータを送信するAndroidアプリケーションを開発しています。
これは私の状況です:
onCharacteristicChanged コールバックは、10hz で「value」と呼ばれるバイト配列を受け取り、いくつかの float および int 変数でデータをアンパックします
handlerThread に関連付けられた Handler は、30hz ごとに Runnable を開始します。このランナブルはvalueからアンパックされた変数を使用し、新しいデータをいくつかの変数に保存し、ブロードキャストメッセージを UX に送信します
- 10hz ごとに別のスレッドがステップ 1 で保存されたデータを使用し、2 がこの変数に対して何らかの数学演算を行い、特性にデータを書き込みます。
上記の手順では、float、double、および int 変数を保存して使用しています。
私は同時実行を処理することを恐れており、ステップ 2 と 3 で同じハンドラ スレッドを使用して同時実行の問題を解決しようと考えています。しかし、他の通知が到着すると、競合状態の問題があると思います:/
他の質問:どのスレッドで oncharacteristicchanged が実行されますか?
私の問題の詳細: oncharacteristicchanged で新しいバイト配列が到着します (10hz の周波数で)、変数のデータをアンパックし、他のスレッド B (30hz で) でこのデータを使用して計算を行います: ux にブロードキャストを送信し、結果を別の場所に保存します。変数; スレッド C はスレッド B の結果を使用し、他の計算を行い、10hz の特性に書き込みます。
oncharacteristicchanged -> スレッド B -> スレッド C
しかし、どのスレッドで実行されるかわからないため、characteristicchanged で停止することはできません..
あなたは