/epam_laba_14

Simple Image Loader for Android

Primary LanguageKotlin

epam_laba_14

Simple Image Loader for Android

see video

Demo work && screenshots

img1

Принцип работы

Для тестирования изображения загружаются в RecyclerView. Сссылки (url) загружаемых изображений берутся с api.flickr.com (flickr.photos.getRecent)

ImageLoader

UPD 26.05.2018 - добавлен HashMap для хранения актуального url для view (для правильной работы с переиспользованием view внутри списков)

ImageLoader.kt

Содержит LRU кэш, с возможностью настройки размера кэша и количества элементов в кэше.

displayImage(view: View, url: String) - метод, который получает контейнер для изображения и ссылку на изображение. Проверяет есть ли изображение в кэше. Если есть, помещает его асинхронно в контейнер. Если нет, ставит в DownloadCompletionService задачу ImageDonloadTask на скачивание изображения.

ImageDownloadTask - реализация Callable, которая описывает задачу загрузки изображения. Возвращает результат: объект Image, который содержит контейнер для изображения, url и bitmap.

DownloadCompletionService - реализация ExecutorCompletionService, которая содержит среду выполнения Executor и предоставляет методы shutdown() и isTerminated() для управления этой средой. При создании ExecutorCompletionService получает Executors.newFixedThreadPool(threadCount), в качестве среды выполнения, где threadCount - число рабочих потоков. Это число можно настраивать (по умолчанию берется число доступных процессорных ядер устройства умноженное на два: Runtime.getRuntime().availableProcessors() * 2) через public свойство threadCount.

ConsumerThread - поток-потребитель результатов работы DownloadCompletionService. Асинхронно добавляет загруженное изображение в контейнер и помещает его в кэш. В каждой итерации поток-потребитель в течении секунды ждет появления новых результатов, затем проверяет не завершилась ли среда выполнения.