Intereting Posts
Как получить скорость ссылки программно? Нужно ли нам запускать виртуальное устройство из eclipse каждый раз, когда мы хотим проверить наш код? OpenCV для Android – обучение SVM с дескрипторами SURF Как отправить SOAP-запрос и Parse SOAP-ответ в формате XML в Android? Оверлей экрана обнаружены блоки Android-разрешения Android.app.Application нельзя использовать для android.app.Activity Проверьте, что пользователь открыл сайт в приложении или нет. Android FileProvider для ext sdcard Catch keypress с Android Резервное копирование / восстановление Android: как создать резервную копию внутренней базы данных? Установка Android sdk. Ошибка: был найден недопустимый контент, начиная с элемента 'd: skin'. На данный момент не ожидается никакого дочернего элемента Android: текст панели инструментов выглядит как черный, а не белый Изменить макет или активность фрагмента (?) С помощью навигационного ящика Разработка Android: использование образа из активов в HTML-формате WebView Пожарная безопасность

Android бесконечная сетка прокрутки, должен ли адаптер расти на неопределенный срок?

Я реализовал простую бесконечную прокрутку GridView на Android. У меня есть следующие компоненты:

  1. GridView с onScrollListener, всякий раз, когда GridView прокручивается до самого низа, я запускаю AsyncTask для загрузки большего количества элементов в свой адаптер.
  2. Адаптер, который добавляет элементы, извлеченные из AsyncTask, и запускает notifyDataChanged (), поэтому GridView может обновить себя.

Это, похоже, отлично работает, за исключением того, что адаптер растет неограниченно … Я имею в виду, что я продолжаю добавлять элементы к этому адаптеру всякий раз, когда пользователь прокручивается до конца, это, похоже, проблема с памятью.

Каков правильный способ внедрения бесконечного адаптера? Я ищу понятия, а не стороннюю банку, которая делает это для меня.

благодаря

решение
Отмеченный ответ имеет правильную теорию. Моя реализация поддерживает резервные копии загруженных данных в базу данных sqlite, поэтому общий поток: загрузка данных из Интернета в потоке, анализ и хранение данных в базе данных в потоке, пожар notifyDataChanged в потоке пользовательского интерфейса.
Метод getCount () адаптера просто выполняет выборку count (id) из базы данных и одновременно извлекает пакет из базы данных в память адаптера для использования.

    Да, обычно, если ваш GridView бесконечен, ваш Adapter бесконечен. Если у вас есть наивная реализация просто загрузки большего количества данных в память, вы наверняка столкнетесь с проблемой памяти в какой-то момент. Чтобы обойти это, вам придется выпустить старые данные в какой-то момент.

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

    Это означает, что ваши элементы GridView построены из Adapter который хранит данные в каком-то кеше ( LruCache может быть полезен LruCache ), который поддерживается некоторым (возможно, внешним) хранилищем. Вы также можете поместить кеш диска между кешем памяти и внешним хранилищем.