2012-09-11 31 views
13

¿Es crucial para el rendimiento tener ViewHolder como estático en un ViewHolder pattern?¿Es crucial para el rendimiento tener ViewHolder como estático en un patrón ViewHolder?

objeto almacena Un ViewHolder cada una de las vistas de elementos dentro del campo de etiqueta del diseño, por lo que puede acceder inmediatamente a ellos sin la necesidad de mirar hacia arriba en varias ocasiones. En primer lugar, debe crear una clase en que contenga su conjunto exacto de vistas. Por ejemplo:

static class ViewHolder { 
    TextView text; 
    TextView timestamp; 
    ImageView icon; 
    ProgressBar progress; 
    int position; 
} 

Respuesta

8

No es crucial para el rendimiento, se trata de utilizar. Si ViewHolder clase no será estático - usted tiene que proporcionar instancia de la clase padre:

No enclosing instance of type Type is accessible. 
Must qualify the allocation with an enclosing instance of type Type 
(e.g. x.new A() where x is an instance of Type). 
+10

¿Qué pasa si la clase ViewHolder se usa dentro de la clase de adaptador? Entonces no tiene que proporcionar una instancia de clase principal ... –

+4

Sí, no es así. – Jin35

+0

Pero eso puede filtrar el adaptador como se indica en http://stackoverflow.com/questions/10864853/when-exactly-is-it-leak-safe-to-use-anonymous-inner-classes – divyenduz

1

Editar: entendido mal la pregunta - parece que está pidiendo específicamente sobre lo que es static. Eso no debería ser crucial para el rendimiento, pero la idea es muy útil.

edición final aquí: Static nested class in Java, why?

====

respuesta Orig continuación:

Es muy agradable para exprimir el rendimiento de un ListView pesada (o algún otro tipo de reciclado AdapterView) Sin embargo, la mejor manera de saberlo sería perfilar el rendimiento de alguna manera.

También en Google IO 2010 que recomiendan este método:

http://www.youtube.com/watch?v=wDBM6wVEO70

Editar:

También aquí hay un enlace a traceview para perfilar el rendimiento, aunque estoy seguro de lo bien que se trabajos.

http://developer.android.com/tools/debugging/debugging-tracing.html

-2

No es obligatorio hacerlo. Pero cuando haces esto, estás usando las vistas de nuevo cuando tu vista del adaptador es nula. Está creando una vista y asignando valores a la parte de vista, y etiqueta toda la vista usando la clase estática ViewHolder. Entonces, cuando vuelvas y la vista no sea nula, la parte visible vendrá para obtener la etiqueta. Así es como creará menos objetos y menos carga de trabajo en el adaptador.

Cuestiones relacionadas