はじめに:
マルチスレッドの Android アプリを作成したいと考えています。私の問題は、スレッド間の通信です。スレッド間の通信について読んだところ、非常に複雑な Looper/Handler 設計や、AtomicInteger のような Atomic Variables などに出くわしました。今のところ、コミュニケーションとして AtomicInteger を使用しましたが、Java の経験があまりないので、それが私の場合に悪いのかどうか、または特定の目的のためのより良い解決策があるかどうかはわかりません。また、実際に AtomicFloat のようなものが必要であることに気付いたとき、私は自分の方法に少し疑いを持っていましたが、それは存在しませんでした。概念を誤用しているように感じました。また、自分で AtomicFloat を作成できることもわかりましたが、これが正しい方法なのか、それともより良い手法があるのかはわかりません。
質問: Atomic Variables を使用して、特定の目的 (以下で説明) のために AtomicFloat も実装することは問題ありませんか?それとも、通信を処理するためのより良い方法はありますか?
これまでの AtomicVariables を使用したアプリの目的/アーキテクチャ:
次の目的で4つのスレッドがあります。
1.SensorThread: センサー データを読み取り、最新の値を AtomicVariables のように保存します。
AtomicFloat gyro_z,AtomicFloat gyro_y, ...
2.CommunicationThread: PC との通信は、ソケットから来るコマンドを解釈し、AtomicInteger: AtomicInteger 状態に関してアプリの状態を設定します。
3.UIThread: AtomicFloat gyro_z、AtomicFloat gyro_y、
4.ComputationThread: センサーの値AtomicFloat gyro_z,AtomicFloat gyro_y, ...
と状態AtomicInteger state
を使用して計算を実行し、USB 経由でコマンドを送信します。