¿Cuál es la diferencia entre los métodos de Android invalidate()
y postInvalidate()
? ¿Cuándo se llama a cada uno? ¿Deben llamarse los métodos solo en las clases que extienden View
?¿Cuál es la diferencia entre los métodos invalidate() y postInvalidate() de Android?
Respuesta
Si desea volver a dibujar su vista desde UI Thread
puede llamar al método invalidate()
.
Si desea volver a dibujar su vista desde Non UI Thread
puede llamar al método postInvalidate()
.
Cada clase que se deriva de la clase View tiene el método invalidar y posInvalidar. 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 en breve en la documentación del SDK:
ACTUALIZACIÓN:
Hay algunos problemas que surgen al utilizar postInvalidate de otros temas (como no tener la actualización de la interfaz de usuario derecha de distancia), este será más eficiente:
runOnUiThread(new Runnable() {
public void run() {
myImageView.setImageBitmap(image);
imageView.invalidate();
}
});
- 1. ¿Cuál es la diferencia entre los métodos iterator y view?
- 2. ¿Cuál es la diferencia entre los archivos .class y .dex?
- 3. Cuál es la diferencia entre android: layout_width y android: width
- 4. ¿Cuál es la diferencia entre los archivos apklib y jar?
- 5. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 6. ¿Cuál es la diferencia entre los paquetes android.opengl y javax.microedition.khronos.opengles?
- 7. Diferencia entre los métodos Map.put y Map.putAll?
- 8. ¿Cuál es la diferencia entre todos los métodos estáticos y la aplicación de un patrón singleton?
- 9. Java: ¿Cuál es la diferencia entre estos métodos de construcción
- 10. ¿Cuál es la diferencia entre getDir y getFilesDir en Android?
- 11. ¿Cuál es la diferencia entre los métodos de escritura y publicación de Ruby?
- 12. Cuál es la diferencia entre las expresiones de consulta LINQ y los métodos de extensión
- 13. ¿Cuál es la diferencia entre Bitmap y Drawable en Android?
- 14. ¿cuál es la diferencia entre sendStickyBroadcast y sendBroadcast en Android
- 15. ¿Cuál es la diferencia entre los métodos element() y getFirst() en la clase LinkedList?
- 16. ¿Cuál es la diferencia entre separar un Fragmento y eliminarlo?
- 17. ¿Cuál es la diferencia entre los métodos dup y clone de Ruby?
- 18. ¿Cuál es la diferencia entre los métodos de índice B-Tree y GiST (en PostgreSQL)?
- 19. ¿Cuál es la diferencia entre los métodos de agregar y ofrecer en una cola en Java?
- 20. ¿Cuál es la diferencia entre los métodos de acceso y mutador?
- 21. ¿Cuál es la diferencia entre ".equals" y "=="?
- 22. ¿Cuál es la diferencia entre dict() y {}?
- 23. Cuál es la diferencia entre = y: =
- 24. ¿Cuál es la diferencia entre los certificados rapidSSL y geotrust?
- 25. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 26. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 27. ¿Cuál es la diferencia entre los archivos .so y .a?
- 28. ¿Cuál es la diferencia entre los eventos Control.Enter y Control.GotFocus?
- 29. ¿Cuál es la diferencia entre los archivos .lib y .a?
- 30. ¿Cuál es la diferencia entre los atributos "wairole" y "role"?
¿No será eso exactamente lo que postInvalidate() hace? – rupps
En el código de ejemplo de Android: http://developer.android.com/training/custom-views/index.html, hay un PieChart.java que tiene getters de propiedades y setters dentro. La mayoría de los establecedores de propiedades llama a invalidate() ;. ¿No es PieChart.java un hilo de interfaz de usuario y cómo puede llamarse invalidar desde allí? (hay un archivo java de actividad principal que es el hilo principal). Hubiera esperado una llamada a postinvalidate(); cómo lo hicieron bajo el método onDraw en PieChart.java. – Simon
@Simon No he revisado el código, pero PieChart.java aún estaría trabajando en el subproceso de la interfaz de usuario a menos que amplíe el subproceso o especifique otro subproceso para usar de alguna otra manera. Lo que probablemente ocurra es que se dibuje el gráfico circular, luego se llama a 'postInvalidate()' dentro del gráfico circular 'onDraw' para dibujar el gráfico circular en una vista en el hilo de la interfaz de usuario. –