Dormir un hilo hasta que un evento sea asistido en otro hilo
Tengo dos subprocesos en una aplicación de Android, uno es el subproceso de vista y el otro es el subproceso de trabajo. Lo que quiero hacer es, dormir el hilo de trabajo hasta que el hilo de vista finalice el manejo del método onDraw.
¿Como puedo hacer esto? ¿Hay alguna espera para la señal o algo?
- Cómo comprobar si el hilo actual no es el hilo principal
- ¿Cuáles son las consecuencias si intentamos conectar un hilo nativo permanentemente a la DVM (JVM)?
- Corrección multihilo: Utilización de bloqueo sincronizado
- Runnable se publica correctamente pero no se ejecuta
- Android: forma correcta de pasar un mensaje de hilo de fondo a hilo de interfaz de usuario?
- Java - Android: Hilo que se llama (ejecutar) dos veces
- ¿Cuál es la causa de los picos de rendimiento periódicos que se ven al hacer el procesamiento de matriz de computación caro en el Nexus 4?
- Clase "Handler" similar en Java
- Cómo esperar a que Android runOnUiThread para ser terminado?
- Bloques sincronizados android
- Handler no entrega un mensaje o un Runnable al subproceso principal
- ¿Una clase anónima mantiene referencias externas vivas?
- Puedo matar o terminar () una actividad en un hilo que no sea el hilo de la interfaz de usuario ...?
Compartir un java.lang.Object entre los dos subprocesos, cuyo único propósito es informar al hilo de trabajo cuando pueda continuar su trabajo. Siempre que el hilo de trabajo alcanza un punto donde debe dormir, hace esto:
stick.wait();
Cuando el hilo de vista finaliza su trabajo onDraw, llama a esto:
stick.notify();
Tenga en cuenta el requisito de que el subproceso de vista posee el monitor en el objeto. En su caso, esto debe ser bastante simple de hacer cumplir con un pequeño bloque de sincronización:
void onDraw() { ... synchronized (stick) { stick.notify(); } } // end onDraw()
Consulte el javadoc para java.lang.Object en estos métodos (y notifyAll, por si acaso); Están muy bien escritos.
Si desea una API de concurrencia de nivel superior (con cosas como Barreras), puede probar el backport de la API de concurrencia de 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 poco tersos.
- Cambiar el fondo de ProgressDialog
- Cómo obtener el tiempo de instalación de la aplicación desde android