427 КБ - это размер загружаемых изображений PNG. PNG сжаты. Когда вы открываете их в памяти, они фактически расширяются, так что каждый пиксель изображения может содержать до 4 байтов (ARGB) значений (в зависимости от формата), а также другие метаданные PNG.
Сохранение миниатюр с двойным размером (размерами) не обязательно приведет к размеру файла с двойным размером. Это может быть больше или меньше, в зависимости от изображения и от того, насколько хорош компрессор изображения.
Добавление изображений непосредственно в поле списка не будет иметь никакого значения. Вы все еще будете загружать их в память. Что вам нужно сделать, так это иметь какой-то управляемый кэш в памяти, скажем, максимум 20 изображений. Ваш код должен быть достаточно умным, чтобы в любой момент определить, где в поле списка находится пользователь, и отобразить изображения для этого представления.
Итак, скажем, у каждого объекта поля списка (или строки) есть тег, связанный с соответствующим изображением (например, имя файла). Как только пользователь закончит прокрутку вверх / вниз, вы можете загрузить изображения для этого представления. Если первая строка, отображаемая в поле списка, - это строка 20, и вы можете отобразить 8 элементов, вам нужно будет захватить изображения 20–28 и загрузить их в кэш в памяти, если их еще нет (поэтому сначала проверьте кэш). ). Затем вызовите invalidate () в поле списка, чтобы убедиться, что оно перерисовывается.
Threading:
a) Вам не понадобится поток, чтобы определить, где находится пользователь в любой точке. Вы должны быть в состоянии использовать методы moveFocus или методы навигации и выяснить, где находится пользователь.
б) Для загрузки изображений необходим механизм организации очередей. Очереди задач достаточно просты для реализации, как только вы освоите механизм потоков / блокировки. Каждая задача в очереди будет загружать изображение в свой собственный поток. Вам нужно установить ограничение на количество активных задач (потоков) в очереди одновременно. Я бы пошел на 3-5 максимум (это из опыта на BB платформах). Для реализации очередей я бы предложил, читая об очередях задач / заданий и проблемах производителя / потребителя.
Вышеуказанный механизм используется очень часто. Вот почему, когда вы, например, прокручиваете список контактов, вы можете увидеть небольшую задержку, прежде чем изображение контакта будет загружено и отображено рядом с именем контакта.