Dormir um fio até que um evento é atendido em outro segmento
-
02-07-2019 - |
Pergunta
Eu tenho dois segmentos em um aplicativo Android, um é o fio vista, eo outro é o segmento de trabalho. O que eu quero fazer é, dormir o segmento de trabalho até que o segmento vista termina a manipulação do método onDraw.
Como posso fazer isso? há qualquer espera para o sinal ou algo assim?
Solução
Compartilhar um java.lang.Object entre os dois tópicos, cujo único propósito é contar o segmento de trabalho quando ele pode continuar seu trabalho. Sempre que o segmento de trabalho chega a um ponto onde ele deve dormir, ele faz isso:
stick.wait();
Quando o segmento vista termina seu trabalho onDraw, chama este:
stick.notify();
Observe a exigência de que o segmento de vista detém o monitor no objeto. No seu caso, esta deve ser bastante simples de aplicar com um bloco de sincronização pequena:
void onDraw() {
...
synchronized (stick) {
stick.notify();
}
} // end onDraw()
Consulte o javadoc para java.lang.Object sobre esses métodos (e notifyAll, apenas no caso); eles estão muito bem escrito.
Outras dicas
Se você quiser um concurreny API de nível superior (com coisas como Barreiras), você pode tentar o backport do java 5 simultaneidade API, que funciona em java 1.3 e acima, e pode funcionar em Android. Os gostos de Object.wait / notificar vai funcionar, mas eles podem ser um pouco concisa.