2012-09-11 10 views
13

Ist es für die Performance entscheidend, ViewHolder als statisch in einer ViewHolder pattern zu haben?Ist es für die Performance entscheidend, dass ViewHolder in einem ViewHolder-Muster statisch ist?

A ViewHolder Objekt speichert jede der Komponentenansichten innerhalb des Tags Bereich des Layouts, so dass man sie sofort ohne Notwendigkeit, sie suchen immer wieder nach oben zugreifen können. Zuerst müssen Sie eine Klasse zu erstellen, die genau Ihre Ansichten enthält. Zum Beispiel:

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

Antwort

8

Es ist für die Leistung nicht entscheidend ist, ist es über die Verwendung. Wenn ViewHolder Klasse nicht statisch sein - müssen Sie Instanz von Elternklasse bieten:

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

Was passiert, wenn die ViewHolder-Klasse in der Adapterklasse selbst verwendet wird? Dann müssen Sie keine Instanz der Elternklasse angeben ... –

+4

Ja, Sie nicht. – Jin35

+0

Aber das kann den Adapter wie in http://stackoverflow.com/questions/10864853/when-exactly-is-it-leak-safe-to-use-anonymous-inner-classes zeigen – divyenduz

1

Edit: falsch verstanden die Frage - es scheint, Sie fragen, speziell darüber machen static. Das sollte nicht ausschlaggebend für die Performance sein, aber die Idee hilft dabei.

Finale bearbeiten hier: Static nested class in Java, why?

====

Orig Antwort unten:

Es ist sehr schön Leistung herauszupressen einer schweren Listview (oder eine andere Art von recycelt AdapterView). Am besten wäre es jedoch, die Leistung irgendwie zu profilieren.

Auch bei Google IO 2010 sie empfehlen diese Methode:

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

Edit:

hier auch einen Link zu traceview die Leistung zu profilieren, obwohl ich nicht sicher bin, wie es gut funktioniert.

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

-2

Es ist nicht zwingend notwendig, das zu tun. Wenn Sie dies jedoch tun, verwenden Sie die Ansichten erneut, wenn Ihre Adapteransicht null ist. Sie erstellen eine Ansicht und weisen dem Ansichtsteil Werte zu und markieren die gesamte Ansicht mit der statischen Klasse ViewHolder. Wenn Sie also zurückkommen und die Ansicht nicht null ist, wird der sichtbare Teil kommen, um das Tag zu erhalten. Auf diese Weise erstellen Sie weniger Objekte und weniger Arbeitsbelastung für den Adapter.

Verwandte Themen