La Red de Conocimientos Pedagógicos - Currículum vitae - La diferencia y el uso de invalidar y postInvalidate

La diferencia y el uso de invalidar y postInvalidate

Android proporciona el método Invalidate para implementar la actualización de la interfaz, pero Invalidate no se puede llamar directamente en el subproceso porque viola el modelo de subproceso único: las operaciones de la interfaz de usuario de Android no son seguras para subprocesos y estas operaciones deben realizarse en el hilo de la interfaz de usuario.

Hay dos métodos de actualización de interfaz que se pueden usar en programas de Android, a saber, usar Handler y usar postInvalidate() para actualizar la interfaz en el hilo.

Utilice invalidate() para actualizar la interfaz

Cree una instancia de un objeto Handler y anule el método handleMessage para llamar a invalidate() para implementar la actualización de la interfaz y enviar mensajes de actualización de la interfaz a través de sendMessage; el hilo.

Código Java

// 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 recibirlo

public void handleMessage(Message msg) {

switch (msg.what) {

case Activity01.REFRESH:

mGameView.invalidate() // Actualiza la interfaz

>

romper;

}

super .handleMessage(msg);

}

}; p > clase GameThread implementa Runnable {

public void run() {

while (!Thread.currentThread().isInterrupted()) {

Mensaje mensaje = nuevo Mensaje();

mensaje.what = Actividad01.REFRESH;

// Enviar mensaje

Actividad01.this .myHandler.sendMessage(message);

intente {

Thread.sleep(100);

} catch (InterruptedException e) {

Thread.currentThread(). interrumpir ();

}

}

}

}

[java] ver copia simple

//Iniciar el hilo en onCreate()

new Thread(new GameThread()).start();,

// Crear una instancia de un controlador

Controlador myHandler = nuevo Controlador() {

// Proceso después de recibir el mensaje

public void handleMessage(Message msg) {

switch (msg.what) {

case Activity01.REFRESH :

mGameView.invalidate(); // Actualizar la interfaz

break

}

super.handleMessage(msg);

}

};

clase GameThread implementa Runnable {

public void run() {

mientras ( !Thread.currentThread().isInterrupted()) {

Mensaje mensaje = nuevo Mensaje()

mensaje.what = Actividad01.REFRESH; // Enviar mensaje

Activity01.this.myHandler.sendMessage(message);

prueba {

Thread.sleep(100); p > } catch (InterruptedException e) {

Thread.currentThread().interrupt()

}

}

}

}

Utilice postInvalidate() para actualizar la interfaz

Usar postInvalidate es relativamente simple, no se necesita ningún controlador, simplemente llame a postInvalidate directamente en el hilo.

Código Java

clase GameThread implementa Runnable {

public void run() {

while (!Thread.currentThread(). isInterrupted()) {

prueba {

Thread.sleep(100

} catch (InterruptedException e) {

Hilo .currentThread().interrupt();

}

// Usa postInvalidate para actualizar la interfaz directamente en el hilo

mGameView.postInvalidate(); /p>

p>

}

}