У меня есть два потока в приложении Android, один - это поток просмотра, а другой - рабочий поток. Я хочу засыпать рабочий поток до тех пор, пока поток представления не завершит обработку метода onDraw.
Как я могу это сделать? есть ли ждать сигнала или что-то в этом роде?




Совместное использование java.lang.Object между двумя потоками, единственная цель которых - сообщить рабочему потоку, когда он может продолжить свою работу. Когда рабочий поток достигает точки, в которой он должен спать, он делает следующее:
stick.wait();
Когда поток просмотра завершает свою работу onDraw, он вызывает это:
stick.notify();
Обратите внимание на требование, чтобы поток представления владел монитором объекта. В вашем случае это должно быть довольно просто обеспечить с помощью небольшого блока синхронизации:
void onDraw() {
...
synchronized (stick) {
stick.notify();
}
} // end onDraw()
Проконсультируйтесь с javadoc для java.lang.Object по этим методам (и notifyAll, на всякий случай); они очень хорошо написаны.
Если вам нужен высокоуровневый API параллелизма (с такими вещами, как барьеры), вы можете попробовать бэкпорт API параллелизма java 5, который работает на java 1.3 и выше и может работать на Android. Подобные Object.wait / notify будут работать, но они могут быть немного краткими.