2010-09-28 3 views
8

Lors du remplacement de l'adaptateur de base sur une vue de liste Android, vous devez implémenter cette méthode public View getView(int position, View convertView, ViewGroup parent). La vue de conversion est la vue qui a été précédemment supprimée de la liste lors du défilement, et elle est donnée afin que vous puissiez réutiliser cette vue au lieu de créer une nouvelle vue.Recyclage des vues dans une liste, ça vaut le coup?

Ma question est, est-il vraiment nécessaire de réutiliser la vue? Je peux comprendre la réutilisation si seulement une partie des données est changée. Mais les frais généraux de création d'une vue sont-ils si importants? Chaque tutoriel sur l'utilisation des listes de lecture que j'ai vues vous indique de recycler la vue, même sur des vues trivialement simples comme une vue de texte.

Je suppose que ma question est pourquoi est-ce que google a décidé d'en faire le comportement par défaut de la méthode getView?

+1

Ce n'est pas difficile à faire et le cadre le rend facile .. Alors oui, ça vaut vraiment le coup. – Rorist

Répondre

13

Quelques raisons de recycler vues:

  • création d'objets est relativement coûteux. Chaque objet supplémentaire créé doit être traité par le système de récupération de place et augmente au moins temporairement votre empreinte mémoire.
  • Ceci est plus important pour les vues plus complexes, mais le gonflement et l'affichage des objets de vue peuvent être coûteux. Le plus souvent, vous n'apportez que des modifications mineures à la vue dans getView, ce qui n'affectera pas la mise en page (par exemple, la définition du texte), de sorte que vous pourrez peut-être éviter la surcharge de mise en page. N'oubliez pas qu'Android est conçu pour être exécuté dans un environnement aux ressources limitées.
  • Enfin, c'est déjà fait pour vous, et ça ne blesse absolument rien, alors pourquoi ne pas l'utiliser?
+0

au moins une raison de ne pas le faire est si vous voulez avoir des dispositions différentes pour différentes lignes dans la liste. Si vous utilisez réellement différentes dispositions, vous ne pouvez pas recycler la vue de concert. Pour pouvoir recycler, vous devez combiner les différentes vues de lignes possibles en une vue d'ensemble. est-ce plus cher que de ne pas recycler les petites vues? Je ne sais pas. –

+8

@JeffreyBlattman Mauvais. BaseAdapter prend en charge différents éléments de vue liste avec getItemViewType (position int) et getViewTypeCount(). Le ListView gérera le recyclage correct pour vous après avoir fourni la vue correcte dans getView(). –

+3

merci de me corriger. –

7

Est-il nécessaire? Seulement si vous aimez 30 à 40 fps supplémentaires pendant les vols sur un Nexus One. :) (Voir les diapositives de http://code.google.com/events/io/2010/sessions/world-of-listview-android.html, diapositives 13-17)

Pourquoi faire fonctionner le périphérique en évitant une optimisation importante qui a été effectuée à 95% pour vous?

+0

Je suppose que c'était ma question. Quelle est exactement la surcharge que la réutilisation d'une vue fournit? – Falmarri

+1

Le gonflement de XML est une énorme partie de celui-ci. Le désabonnement des objets est moins important mais peut entraîner des pauses GC remarquables lors des lancements, en particulier sur les appareils plus anciens. – adamp

Questions connexes