Frage

I zwei Threads in einem Android Anwendung haben, ist man der Ansicht, Gewinde, und der andere ist der Arbeiter-Thread. Was ich tun möchte, ist, schlafen die Worker-Thread, bis die Ansicht Faden die Handhabung des OnDraw Verfahren beendet wird.

Wie kann ich das tun? Gibt es eine Wartezeit für das Signal oder etwas?

War es hilfreich?

Lösung

Teilen Sie ein java.lang.Object zwischen den beiden Fäden, deren einziger Zweck es ist, den Arbeitsthread zu sagen, wenn er seine Arbeit fortsetzen kann. Jedes Mal, wenn der Arbeiter-Thread einen Punkt erreicht, wo es sollte schlafen, tut es dies:

stick.wait();

Wenn die Ansicht Thread seine OnDraw Arbeit beendet hat, ruft sie aus:

stick.notify();

Beachten Sie die Anforderung, dass die Ansicht Thread den Monitor auf dem Objekt besitzt. In Ihrem Fall, sollte dies recht einfach mit einem kleinen Sync-Block zu erzwingen:

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

Lesen Sie die javadoc für java.lang.Object zu diesen Methoden (und notifyAll, nur für den Fall); sie sind sehr gut geschrieben.

Andere Tipps

Wenn Sie eine höhere Ebene Nebenläufigkeit API wollen (mit Dingen wie Barrieren), könnten Sie die Rückportierung der Java 5 Gleichzeitigkeit API versuchen, die auf Java funktioniert 1.3 und höher und kann auf Android arbeiten. Das mag von Object.wait / notify funktionieren wird, aber sie kann ein wenig kurz und bündig sein.

Backport-util-Concurrent

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top