Notas de Android: la diferencia y el uso de invalidate () y postInvalidate ()

http://blog.csdn.net/mars2639/article/details/6650876

Android proporciona el método Invalidate para actualizar la interfaz, pero no se puede llamar a Invalidate directamente en el subproceso, porque viola el modelo de un solo subproceso: las operaciones de la IU de Android no son seguras para subprocesos y estas operaciones deben llamarse en el subproceso de la IU. 

invalidate () se usa para actualizar la vista y debe hacerse en el hilo de la interfaz de usuario. Por ejemplo, al modificar la visualización de una vista, llame a invalidate () para ver la interfaz redibujada. La llamada de invalidate () saca la vista anterior de la cola de subprocesos de la IU principal. Un programa de Android tiene solo un proceso por defecto, pero puede haber muchos subprocesos en un proceso.

Entre tantos subprocesos, el subproceso que es principalmente responsable de controlar la visualización, actualización y control de la interacción de la interfaz de la interfaz de usuario se llama subproceso de la interfaz de usuario. Dado que el método onCreate () es ejecutado por el subproceso de la interfaz de usuario, el subproceso de la interfaz de usuario también puede entenderse como el subproceso principal. Los subprocesos restantes se pueden entender como subprocesos de trabajo.

invalidate () debe movilizarse en el subproceso de la interfaz de usuario y se puede notificar al subproceso de la interfaz de usuario que actualice la interfaz a través del controlador en el subproceso de trabajo.

Y se llama a postInvalidate () en el hilo de trabajo

 

 

Utilice invalidate () para actualizar la interfaz para

  crear una instancia de un objeto Handler y reescribir el método handleMessage para llamar a invalidate () para lograr la actualización de la interfaz; mientras está en el hilo, el mensaje de actualización de la interfaz se envía a través de sendMessage. 
// Iniciar el hilo en onCreate ()

new Thread (new GameThread ()). Start ();

// Crear una instancia de un controlador

Handler myHandler = new Handler () { // Procesar el mensaje después de recibir public void handleMessage (Mensaje msg ) { switch (msg.what) { case Activity01.REFRESH: mGameView.invalidate (); // actualiza la interrupción de la interfaz ; } super.handleMessage (msg); } }; class GameThread implementa Runnable { public void run () { while ( ! Thread.currentThread (). IsInterrupted ()) { Mensaje mensaje = nuevo Mensaje (); mensaje.lo = Actividad01.REFRESH;

















// Enviar un mensaje
Activity01.this.myHandler.sendMessage (message);
try { Thread.sleep (100); } catch (InterruptedException e) { Thread.currentThread (). Interrupt (); } } } } actualizar con postInvalidate () La interfaz que     usa postInvalidate es relativamente simple, no se necesita un controlador, simplemente llame a postInvalidate directamente en el hilo. La clase GameThread implementa Runnable { public void run () { while (! Thread.currentThread (). isInterrupted ()) { try { Thread.sleep (100); } catch (InterruptedException e) { Thread.currentThread (). interrupt () ; } // Usa postInvalidate para actualizar la interfaz directamente en el hilo mGameView.postInvalidate (); } }


























}

Supongo que te gusta

Origin blog.csdn.net/kerwinJu/article/details/52885794
Recomendado
Clasificación