30

Android アプリケーションには 2 つのスレッドがあり、1 つはビュー スレッドで、もう 1 つはワーカー スレッドです。私がやりたいことは、ビュー スレッドが onDraw メソッドの処理を終了するまで、ワーカー スレッドをスリープ状態にすることです。

どうすればこれを行うことができますか? 信号か何かを待っていますか?

4

2 に答える 2

41

2 つのスレッド間で java.lang.Object を共有します。このオブジェクトの唯一の目的は、ワーカー スレッドがいつ作業を続行できるかを伝えることです。ワーカー スレッドがスリープ状態になると、次のようになります。

stick.wait();

ビュー スレッドが onDraw 作業を終了すると、これを呼び出します。

stick.notify();

ビュー スレッドがオブジェクトのモニターを所有しているという要件に注意してください。あなたの場合、これは小さな同期ブロックで実施するのがかなり簡単なはずです:

void onDraw() {
  ...
  synchronized (stick) {
    stick.notify();
  }
} // end onDraw()

これらのメソッド (および念のため、notifyAll) の java.lang.Object については、javadoc を参照してください。それらは非常によく書かれています。

于 2008-09-23T15:45:51.333 に答える
2

より高レベルの同時実行 API (バリアなど) が必要な場合は、Java 1.3 以降で動作し、Android でも動作する可能性がある Java 5 同時実行 API のバックポートを試すことができます。Object.wait/notify のようなものは機能しますが、少し簡潔になる可能性があります。

Backport-util-concurrent

于 2008-09-23T16:54:01.420 に答える