2008-09-23 22 views
24

Tengo dos hilos en una aplicación de Android, uno es el hilo de vista y el otro es el hilo de trabajo. Lo que quiero hacer es suspender el hilo de trabajo hasta que el hilo de vista finalice el manejo del método onDraw.Dormir un hilo hasta que se atienda un evento en otro hilo

¿Cómo puedo hacer esto? ¿Hay alguna espera por la señal o algo así?

Respuesta

33

Comparta un java.lang.Object entre los dos hilos, cuyo único propósito es indicar el hilo del trabajador cuando puede continuar su trabajo. Cada vez que el subproceso de trabajo llega a un punto en el que debe dormir, lo hace:

stick.wait(); 

Cuando la vista de hilo termine su trabajo onDraw, se llama a esto:

stick.notify(); 

en cuenta el requisito de que las vista de hilos posee el monitor en el objeto. En su caso, esto debería ser bastante simple de hacer cumplir con un pequeño bloque de sincronización:

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

En el javadoc java.lang.Object sobre estos métodos (y notifyAll, por si acaso); están muy bien escritos.

2

Si desea una API concurreny de nivel superior (con cosas como Barriers), puede probar el respaldo de la API de concurrencia java 5, que funciona en Java 1.3 y superior, y puede funcionar en Android. Los gustos de Object.wait/notify funcionarán, pero pueden ser un tanto escuetos.

Backport-util-concurrent

Cuestiones relacionadas