Посмотреть шаблон Holder, как обрабатывать растровые изображения в адаптере? - PullRequest
0 голосов
/ 01 декабря 2011

В демонстрации API приведен пример эффективного адаптера списка, в котором все растровые изображения предварительно загружены в конструктор адаптера:

// Icons bound to the rows.
mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_1);
mIcon2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_2);

В случае, если адаптеру приходится иметь дело с большим количеством растровых изображений, это все еще хорошая практика или будет лучше сделать что-то подобное в getView:

holder.myImage.setImageDrawable(context.getResources().getDrawable(R.drawable.icon48x48_1));

Обратите внимание, в моем случае, я могу иметь что-то вроде 10-15 возможных растровых изображений, но только несколько будут использоваться одновременно. Меня беспокоит память, используемая адаптером.

Спасибо

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Если значки действительно 48x48 пикселей, они не будут такими большими, и, поскольку у вас есть известный небольшой набор из них, их предварительная загрузка, вероятно, подойдет. Я бы не использовал этот подход, если:

  • изображения массивны или
  • изображения загружаются из мест, отличных от ресурсов, или
  • будет более нескольких десятков изображений размером с иконку

Вы всегда можете выгрузить свою кучу из DDMS и проверить ее с помощью плагина Eclipse MAT, чтобы получить представление о том, сколько фактически места в куче используется. Протестируйте его на Honeycomb или Ice Cream Sandwich, так как вы получите лучшие результаты для отслеживания потребления кучи растровых изображений.

0 голосов
/ 01 декабря 2011

Один из способов сделать это - подождать, пока список остановится, а затем установить изображения для элементов списка, которые видны. Таким образом, вам нужно будет загружать только изображения, которые отображаются в данный момент (по сравнению с предварительной загрузкой всего в конструкторе), и прокрутка не будет казаться прерывистой или медленной. Это немного больше работы, но это сделает ваш список действительно гладким с минимальным использованием памяти.

...