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 p >
// Iniciar el hilo en onCreate()
new Thread(new GameThread()).start();,
// Crear una instancia de un controlador
Handler myHandler = new Handler() {
// Proceso después de recibir el mensaje
public void handleMessage(Mensaje msg) {
switch (msg.what) {
case Activity01.REFRESH:
mGameView.invalidate() // Actualiza la interfaz
break
}
super.handleMessage(msg);
}
};
clase GameThread implementa Runnable {
>public void run() {
while (!Thread.currentThread().isInterrupted()) {
Mensaje mensaje = nuevo Mensaje();
message.what = Activity01.REFRESH;
// Enviar mensaje
Activity01.this.myHandler.sendMessage(message
try {
p>Thread.sleep(100);
} 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>
}
}