Виджет галереи Android с проблемой нехватки памяти - PullRequest
0 голосов
/ 01 ноября 2010

У меня есть виджет галереи с почти полноэкранными изображениями. Изображения загружаются с SD-карты, и одновременно видно только одно изображение (при прокрутке принимайте за перекрытие). Проблема в том, что после прокрутки около 35 изображений я получаю OutOfMemoryError: битовая карта превышает бюджет виртуальной машины. Я думал, что виджет галереи распределяет представления по мере необходимости, но я думаю, что я либо ошибаюсь, либо делаю что-то не так.

Я использую CursorAdapter для загрузки данных и замечаю, что при каждом переходе к новому изображению вызываются как newView (), так и bindView (). Я предполагаю, что это означает, что исходное представление было удалено, но проблема нехватки памяти, кажется, указывает на противоположное. Я использую ViewHolder с несколькими полями.

Итак, мои вопросы:

  1. Работает ли виджет галереи иначе, чем просмотр списка при использовании с CursorAdapter?
  2. Существует ли способ принудительной переработки и / или удаления видов? (Или что я могу делать не так).
  3. Другие предложения по решению проблем нехватки памяти для этого сценария? Уменьшение масштаба на самом деле не вариант, и галерея должна иметь возможность обрабатывать неограниченное количество изображений (или как минимум вдвое больше).

1 Ответ

0 голосов
/ 02 мая 2011

Какой размер изображения? Это вызовет проблему. Попробуйте уменьшить размер изображения:

BitmapFactory.Options o2 = new BitmapFactory.Options();
//Best to use powers of 2.
o2.inSampleSize=2;
BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
...