2011-10-06 14 views
6

gente,Android - Forma adecuada para esperar objeto manejador por crear

Aquí es un código simplificado para mi fondo de rosca:

public class MyThread extends Thread { 
     private Handler _handler; 

     public void run() { 
     Looper.prepare(); 
     this._handler = new Handler(); 
     Looper.loop(); 
     } 

     public void DoSomething() { 
     if (!this.isAlive()) { 
      this.start(); 
     } 

     this._handler.post(blah); 
     } 
    } 

El problema que tengo es que el subproceso de fondo puede no tener sin embargo, creó el objeto controlador cuando se realiza la llamada post(). Básicamente, necesito un bucle de espera para que el objeto del manejador se inicialice. ¿Cuál es el método aceptado generado de hacer esto en Android?

Gracias de antemano por su ayuda.

Saludos, Peter

+0

¿Quiere decir "... creó el objeto controlador cuando * se hace la llamada DoSomething() *"? –

+0

Esencialmente sí. No ese objeto controlador no se creará hasta que start() sea llamado (por primera vez) desde DoSomething(). Pero tenemos que esperar hasta que el subproceso bg comience a ejecutarse y se haya creado el objeto del manejador. Actual, tengo un ciclo while donde duermo durante 50 ms y compruebo si se ha creado el controlador. Me pregunto si hay una mejor manera. Gracias – Peter

Respuesta

3

Puede establecer una bandera después de inicializar el controlador y esperar por la bandera antes de llamar post.

Una manera fácil de esperar un indicador en un sistema simultáneo es con un CountDownLatch. Comenzaría en 1 y disminuirá después de que se inicialice el controlador. Consulte los detalles aquí: http://download.oracle.com/javase/1,5,0/docs/api/java/util/concurrent/CountDownLatch.html

+0

Gracias por su ayuda. Esto parece exactamente lo que necesito. – Peter

Cuestiones relacionadas