0

USB経由でAndroidタブレットが原因で、arduinoからデータを受信して​​います。

私の主な活動では、新しいデータが USB に到着したときに関数を実行するリスナーがあります。

問題は、関数の実行に時間がかかることですが、新しいデータが到着するとすぐに、この関数が再びトリガーされます。USB から 115200 bps で継続的にデータをストリーミングしています。

これを解決するために、greenrobot イベント バスを使用してみました。新しいデータが到着すると新しいイベントが投稿され、このイベントはサービスによってサブスクライブされます。

イベントがキューに入れられ、最後のイベントが完全に実行されるのを待つかどうかは疑問です。

4

1 に答える 1

1

簡単に言えば、このEventBusプロセスは一方通行です。パブリッシャーがイベント (メッセージ) を投稿すると、そのイベント タイプに登録したすべてのサブスクライバーに通知されます。

Eventサブスクライバーがトリガーに基づいてコードの実行を開始または終了したかどうかは言うまでもなく、パブリッシャーは、サブスクライブされているクラス (存在する場合) を認識していません。これを知っているのは EventBus だけです。

私の提案は、関数コードの先頭にフラグを置き (最後に false を設定)、onEvent() でチェックされ、関数を呼び出すかどうかを確認することです。

これらのイベントをキューに入れる必要がある場合は、自分で処理する必要があります。まず、 Arraydeque / Dequeファミリーを見てみましょう。

于 2014-05-26T03:55:44.113 に答える