2008-09-23 4 views

Antwort

33

Geben Sie ein java.lang.Object zwischen den beiden Threads frei, dessen einziger Zweck darin besteht, dem Worker-Thread mitzuteilen, wann er seine Arbeit fortsetzen kann. Jedes Mal, wenn der Arbeiter-Thread einen Punkt erreicht, wo er schlafen soll, tut es dies:

stick.wait(); 

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

stick.notify(); 

Beachten Sie die Anforderung, dass die Ansicht Faden besitzt den Monitor für das Objekt. In Ihrem Fall, sollte dies recht einfach mit einem kleinen Sync-Block zu erzwingen:

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

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

2

Wenn Sie eine höhere concurreny API (mit Dingen wie Barriers) wollen, können Sie den Backport der Java 5 Concurrency API ausprobieren, die auf Java 1.3 und höher funktioniert und unter Android funktioniert. Die Funktion "Object.wait/notify" funktioniert, aber sie kann etwas knapp sein.

Backport-util-concurrent