Android アプリケーションには 2 つのスレッドがあり、1 つはビュー スレッドで、もう 1 つはワーカー スレッドです。私がやりたいことは、ビュー スレッドが onDraw メソッドの処理を終了するまで、ワーカー スレッドをスリープ状態にすることです。
どうすればこれを行うことができますか? 信号か何かを待っていますか?
Android アプリケーションには 2 つのスレッドがあり、1 つはビュー スレッドで、もう 1 つはワーカー スレッドです。私がやりたいことは、ビュー スレッドが onDraw メソッドの処理を終了するまで、ワーカー スレッドをスリープ状態にすることです。
どうすればこれを行うことができますか? 信号か何かを待っていますか?
2 つのスレッド間で java.lang.Object を共有します。このオブジェクトの唯一の目的は、ワーカー スレッドがいつ作業を続行できるかを伝えることです。ワーカー スレッドがスリープ状態になると、次のようになります。
stick.wait();
ビュー スレッドが onDraw 作業を終了すると、これを呼び出します。
stick.notify();
ビュー スレッドがオブジェクトのモニターを所有しているという要件に注意してください。あなたの場合、これは小さな同期ブロックで実施するのがかなり簡単なはずです:
void onDraw() {
...
synchronized (stick) {
stick.notify();
}
} // end onDraw()
これらのメソッド (および念のため、notifyAll) の java.lang.Object については、javadoc を参照してください。それらは非常によく書かれています。
より高レベルの同時実行 API (バリアなど) が必要な場合は、Java 1.3 以降で動作し、Android でも動作する可能性がある Java 5 同時実行 API のバックポートを試すことができます。Object.wait/notify のようなものは機能しますが、少し簡潔になる可能性があります。