2011-04-02 12 views
55

¿Cuál es el uso de la función postInvalidate() en Android? He estado viendo esta función en muchos lugares. Cuando busqué en Google, me encontré con esto:¿Qué hace postInvalidate()?

postInvalidate-- puesto una solicitud de invalidación en la IU-hilo

No sé lo que la frase "invalida la solicitud" no medio. ¿Alguien puede explicar en detalle lo que está sucediendo aquí?

Respuesta

110

Cada clase que se deriva de la clase View tiene la invalidate y el método depostInvalidate. 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 es briefly explained en la documentación del SDK.

Simplemente compare invalidar y publicarInvalidar.

+1

Gracias por la respuesta. Lo tengo ahora. – rogerstone

+1

Veo las lógicas en su respuesta, pero invalidate() también funciona en mi clase que no es UI. Funciona tan bien como postInvalidate(). – JustBasti

+1

Gran respuesta. Los documentos de Android no explican que su intención es volver a dibujar la Vista. Aclarado :) :) – Andy

19

Con este método (postInvalidate()), puede invalidar un View de subprocesos que no sean UI. Para invalidar un View de la UI-thread use el método invalidate().

significa la invalidación, que el método View.onDraw(Canvas) le hemos llamado en algún momento en el futuro (no inmediatamente) para redibujar toda View (si el View es visible).

Android está redibujando View s de forma automática, pero a veces es necesario decir: "Oye, este View se ha cambiado, vuelva a dibujar lo más rápido posible".

Más en:

http://developer.android.com/guide/topics/ui/how-android-draws.html

http://developer.android.com/reference/android/view/View.html#invalidate%28%29

+1

Muchas gracias – rogerstone

1

En palabras sencillas, invalidate() método puede ser llamado desde la interfaz de usuario de rosca y postInvalidate() puede llamar desde Hilo no interfaz de usuario con el fin de decirle a Android para actualizar nuestra Vista personalizada después de realizar algunos cambios en ella.