2010-09-28 5 views
8

Wenn Sie den Basisadapter in einer Android-Listenansicht überschreiben, müssen Sie diese Methode implementieren public View getView(int position, View convertView, ViewGroup parent). Die ConvertView-Ansicht ist die Ansicht, die beim Scrollen zuvor von der Liste verschoben wurde. Sie ist so definiert, dass Sie diese Ansicht wiederverwenden können, anstatt eine neue Ansicht zu erstellen.Ansichten in einer Listenansicht recyceln, es lohnt sich?

Meine Frage ist, ist es wirklich notwendig, die Ansicht wieder zu verwenden? Ich kann es wiederverwenden, wenn nur ein Teil der Daten geändert wird. Aber ist der Aufwand, um eine Sicht zu schaffen, wirklich so wichtig? Jedes Tutorial zur Verwendung von Listenansichten, die ich gesehen habe, sagt Ihnen, die Ansicht zu recyceln, sogar in trivial einfachen Ansichten wie einer Textansicht.

Ich denke, meine Frage ist, warum hat Google beschlossen, dies zum Standardverhalten der getView Methode zu machen?

+1

Das ist nicht schwer Todo und der Rahmen machen es einfach .. Also ja, es lohnt sich. – Rorist

Antwort

13

Ein paar Gründe Ansichten zu recyceln:

  • Objekterzeugung relativ teuer ist. Jedes zusätzliche Objekt, das erstellt wird, muss vom Garbage Collection-System verarbeitet werden und erhöht den Speicherbedarf mindestens temporär.
  • Dies ist wichtiger für komplexere Ansichten, aber das Aufblasen und Auslegen der Ansichtsobjekte kann teuer sein. In den meisten Fällen nehmen Sie nur geringfügige Änderungen an der Ansicht in getView vor, die sich nicht auf das Layout auswirken (z. B. Text festlegen), sodass Sie möglicherweise den Layout-Overhead vermeiden können.
  • Denken Sie daran, dass Android in einer ressourcenbeschränkten Umgebung ausgeführt werden soll.
  • Schließlich ist es bereits für Sie getan, und es tut nichts wirklich weh, also warum nicht verwenden?
+0

mindestens einen Grund, es nicht zu tun, wenn Sie unterschiedliche Layouts für verschiedene Zeilen in der Listenansicht haben möchten. Wenn Sie tatsächlich verschiedene Layouts verwenden, können Sie die Concert-Ansicht nicht recyceln. Um recyceln zu können, müssen Sie die verschiedenen möglichen Zeilenansichten zu einer Übersicht zusammenfassen. ist das teurer als nicht kleinere Ansichten zu recyceln? ich weiß es nicht. –

+8

@ JeffreyBlattman Falsch. BaseAdapter unterstützt verschiedene Listenansichtselemente mit getItemViewType (int position) und getViewTypeCount(). Das ListView wird das korrekte Recycling für Sie übernehmen, nachdem Sie die richtige Ansicht in getView() bereitgestellt haben. –

+3

danke für die Korrektur mich. –

7

Ist es notwendig? Nur wenn Sie bei einem Nexus One zusätzliche 30-40 fps mögen. :) (Siehe Folien von http://code.google.com/events/io/2010/sessions/world-of-listview-android.html, Dias 13-17)

Warum lässt das Gerät arbeiten, was es nicht tun muss, indem es eine signifikante Optimierung ignoriert, die zu 95% für Sie erledigt wurde?

+0

Ich denke, das war meine Frage. Was genau ist der Overhead, der die Wiederverwendung einer Ansicht bietet – Falmarri

+1

Aufblasen von XML ist ein großer Teil davon. Die Abwanderung von Objekten ist weniger bedeutsam, kann jedoch zu wahrnehmbaren GC-Pausen während der Übertragung führen, insbesondere auf älteren Geräten. – adamp

Verwandte Themen