ListView + отдельный просмотр текста в каждом элементе = чрезмерный сбор мусора - PullRequest
0 голосов
/ 30 октября 2011

Прежде всего, у меня есть простой ListView. Реализация BaseAdapter и использование шаблона ViewHolder У меня просто есть TextView, который при каждом вызове getView() устанавливает текст с различным String. Каждая строка имеет различную длину и может разбиваться на несколько строк.

Чрезмерный сбор мусора происходит при прокрутке, это вызвано StaticLayout, который используется внутри класса TextView. Он создает float[], а затем сборщик мусора собирает их и вызывает заикание в моей ListView прокрутке. Я пришел к такому выводу после отслеживания прокрутки через Allocation Tracker. Обратите внимание, что чрезмерным является не то, что он собирает огромные куски памяти, а множество маленьких.

Поскольку я сталкиваюсь с этой проблемой, даже когда я упрощаю свой код до основ, я предполагаю, что кто-то сталкивался с этим до меня. Поскольку это системная ошибка, а не то, что я могу обойти, все еще используя TextView, что вы предлагаете использовать в качестве обходного пути для этой ошибки?

1 Ответ

1 голос
/ 30 октября 2011

Я исправил поведение, хотя до сих пор не понимаю, почему это произошло.В моем ListView я устанавливал cacheColorHint как #00000000, и это вызывало проблемы в сочетании с моими глобальными настройками темы android:windowBackground=@null и android:windowContentOverlay=@null.Я не понимаю, почему это вызвало бы чрезмерное сборщик мусора, и почему простое изменение cacheColorHint на #FFFFFFFF повлияло бы на это, но какая иерархия рисования в Android не всегда следует по наиболее очевидному пути.

...