1

touchevents と sensorevents の両方を利用するアプリケーションを作成しています。touchevents の問題は、非常に頻繁に発生するため、大量の CPU 時間を消費することです。一般的な解決策は、Thread.sleep を実行してクールダウンさせることです。

ただし、同じアクティビティで onTouchEvent と onSensorChanged の両方を使用したい場合、Thread.sleep ハックを適用すると onSensorChanged も遅くなります。これは明らかに、2 つのメソッドが同じ (ui) スレッドから呼び出されていることが原因です。

UI とは異なるスレッドから onTouchEvent を呼び出す方法はありますか?

4

1 に答える 1

0

「一般的な解決策は、Thread.sleep を実行してクールダウンすることです。」

どこで聞いた?メイン スレッド (EDT - イベント ディスパッチ スレッドとも呼ばれます) でのスリープは受け入れられません。Android は画面を再描画し、このスレッドであらゆる種類のタスクを実行しています。スリープ状態にすると応答しなくなる可能性があり、私見では悪い習慣です。

onTouchEvent() が頻繁に発生する場合は、コードでそれらをフィルタリングするだけです。最後のイベントから少なくとも X 時間が経過していない場合は何もしません。

long lastTime = 0; // field in you class holding event handler

// inside your onTouchEvent handler
if(System.getCurrentTimeMillis() - lastTime < XXX)
    return;
 lastTime = System.getCurrentTimeMillis();
于 2010-11-13T10:05:43.887 に答える