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

Я работаю над приложением для Android. У меня есть активность, которая содержит представление списка.

В виде списка есть много элементов, каждый из которых содержит растровое изображение.

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

Поэтому я ищу способ сделать следующее для старых устройств:

  • Загрузите растровые изображения для элементов, находящихся в представлении (или рядом с ним).
  • Когда пользователь прокручивается вниз, я загружаю растровые изображения, которые должны отображаться ему , и удаляем растровые изображения, которые теперь скрыты .
  • Поэтому в любое время только изображения, которые находятся в представлении (или рядом с ним), загружаются в кучу, а остальные удаляются, когда они больше не видны.

Есть ли способ сделать это?

Дополнительная информация:

Я выполнил все инструкции и код о том, как эффективно загружать изображения Bitmap (в документации по Android и на любом сайте, который я мог найти), я также удостоверился, что нет утечек памяти, я перерабатываю каждый растровый рисунок и слежу за тем, чтобы GC работал правильно и, наконец, на старых устройствах я сделал разрешение изображений наименьшим возможным. Но размер списка приводит к тому, что на некоторых устройствах по-прежнему появляется неиспользуемая память.

Поэтому я хочу знать, смогу ли я выполнить предложенное выше решение.

Большое спасибо за любую помощь

11
nl ja de
Вы пытались реализовать шаблон View Holder?
добавлено автор Igor Ganapolsky, источник

3 ответы

Вы должны рассмотреть возможность использования приложения «Пример галереи» в Google I/O 2012. Все, что вам нужно, реализовано там.

Video from Google I/O about gallery app

Исходный код доступен в Google Code , и это отличный пример создания галереи. Вы также должны рассмотреть возможность презентации Romain Guy (начало), где он объясняет проблемы с производительностью с помощью ListView и учит эффективно использовать адаптеры. (Шаблон ViewHolder и повторное использование представлений).

Вот утилита RecycleListener для GridView (доступна на уровне API 1). RecyclerListener используется для получения уведомлений всякий раз, когда представление помещается внутри кучи утилизации RecycleBin. Этот прослушиватель используется для освобождения ресурсов, связанных с представлениями, размещенными в RecycleBin.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.album);

    mAdapter = new PhotoAdapter(this);

    mGridView = (GridView) findViewById(android.R.id.list);
    mGridView.setAdapter(mAdapter);

    mGridView.setRecyclerListener(new RecyclerListener() {
        @Override
        public void onMovedToScrapHeap(View view) {
           //Release strong reference when a view is recycled
            final ImageView imageView = (ImageView) view.findViewById(android.R.id.icon);
            imageView.setImageBitmap(null);
        }
    });

   //Kick off loader for Cursor with list of photos
    getLoaderManager().initLoader(LOADER_CURSOR, null, mCursorCallbacks);
}
11
добавлено
Большое спасибо!
добавлено автор kaitian521, источник

Вы хотите найти несколько уроков и примеров для «ленивой загрузки».
Один из возможных примеров: https://github.com/thest1/LazyList

0
добавлено
Я могу ошибаться в этом, но не ленивая загрузка только для загрузки изображений по мере их появления, но не удаления уже загруженной картинки?
добавлено автор Youssef, источник
Это зависит от реализации. Может быть, ленивая загрузка по умолчанию - это то, как вы ее описываете, но я знаю, что данный пример отсутствует. Вы можете увидеть его (и много других больших библиотек), работающих в приложении шаблонов пользовательского интерфейса: play.google.com/store/apps/details?id=com.groidify.uipattern‌ s
добавлено автор Stefan de Bruijn, источник

Используя библиотеку, например Универсальный загрузчик изображений , вы можете настроить кеширование изображений и управление памятью. Вы можете установить максимальный размер кеша, и он также позаботится о загрузке изображений в фоновый поток.

ListView позаботится о том, чтобы переработать взгляды, в которые вы помещали изображения в удобное для вас время.

0
добавлено
Возможно, что-то вроде Пикассо.
добавлено автор Igor Ganapolsky, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)