example - view android studio
¿Cuál es la diferencia entre los métodos invalidate() y postInvalidate() de Android? (1)
¿Cuál es la diferencia entre los métodos invalidate()
y postInvalidate()
Android? ¿Cuándo se llama a cada uno? ¿Deben llamarse los métodos solo en clases que extienden View
?
Si desea volver a dibujar su vista desde UI Thread
puede llamar al método invalidate()
.
Si desea volver a dibujar su vista desde el Non UI Thread
, puede llamar postInvalidate()
método postInvalidate()
.
Cada clase que se deriva de la clase View tiene el método invalidate y postInvalidate. Si se llama a invalidación, le dice al sistema que la vista actual ha cambiado y se debe volver a dibujar tan pronto como sea posible. Como este método solo puede invocarse desde UIThread, se necesita otro método para cuando no se encuentre en UIThread y aún desee notificar al sistema que su Vista ha sido modificada. El método postInvalidate notifica al sistema desde un mensaje no UIThread y la vista se vuelve a dibujar en el siguiente evento en el UIThread lo antes posible. También se explica brevemente en la documentación del SDK:
ACTUALIZAR:
Hay algunos problemas que surgen cuando se usa postInvalidate de otros hilos (como no tener la UI actualizada de inmediato), esto será más eficiente:
runOnUiThread(new Runnable() {
public void run() {
myImageView.setImageBitmap(image);
imageView.invalidate();
}
});