2011-10-30 6 views
0

Tout d'abord j'ai un simple ListView. Mettre en œuvre le BaseAdapter et en utilisant le modèle ViewHolder J'ai simplement un TextView que sur chaque getView() appel définit le texte avec un différent String. Chaque chaîne a différentes longueurs et peut se diviser en plusieurs lignes.ListView + simple textview dans chaque article = collecte des ordures excessive

La collecte excessive des déchets se produit lorsque vous faites défiler, elle est provoquée par le StaticLayout qui est utilisé dans la classe TextView. Il crée float[] puis le garbage collector les collecte et provoque un bégaiement dans mon défilement ListView. Je suis arrivé à cette conclusion après avoir suivi mon défilement à travers le Allocation Tracker. Notez qu'excessif n'est pas que c'est la collection d'énormes morceaux de mémoire mais beaucoup de petits.

Depuis que je suis confronté à ce problème, même si je simplifie mon code à la base, je suppose que quelqu'un a rencontré ce problème avant moi. Parce que c'est un bug système et pas quelque chose que je peux contourner tout en utilisant le TextView, que suggérez-vous que j'utilise comme une solution de contournement pour ce bug?

+2

Vous faites probablement quelque chose de mal. Postez votre code. –

+0

+1 à ci-dessus. Code postal, ou c'est impossible à dire. – bos

Répondre

1

J'ai corrigé le comportement, même si je ne comprends toujours pas pourquoi c'est arrivé. Dans mon ListView je mettais le cacheColorHint comme #00000000 et cela posait des problèmes lorsqu'il est combiné avec mes paramètres de thème global de android:[email protected] et android:[email protected]. Je ne comprends pas pourquoi cela causerait GC excessif ni pourquoi simplement changer le cacheColorHint à #FFFFFFFF l'affecterait, mais ce que la hiérarchie de dessin d'Android ne suit pas toujours le chemin le plus évident.