Picasso: що це, завантаження зображень та робота в Android-додатках

Автор: IT Sectr Опубліковано: 2026-05-05 Час читання: 8 хв

Picasso — це бібліотека для завантаження зображень в Android-додатках, розроблена компанією Square. Бібліотека надає простий та виразний API для завантаження, кешування та відображення графіки з мережі. За даними GitHub-статистики Picasso, бібліотеку завантажено понад 100 000 разів. Picasso автоматично керує пам’яттю та кешує зображення на кількох рівнях.

Головне

  • Picasso — бібліотека завантаження зображень від Square з простим API для Android
  • Кешування на диску та в пам’яті скорочує час завантаження повторних зображень
  • Трансформації Crop, Resize та Rotate застосовуються до зображень на льоту
  • Placeholder та error-зображення відображаються під час завантаження та при помилці
  • Пріоритети завантаження дозволяють керувати порядком відображення зображень

Що таке Picasso?

Picasso — це бібліотека для асинхронного завантаження зображень в Android, створена компанією Square. Назву отримала на честь художника Пабло Пікассо, відображаючи філософію бібліотеки: перетворювати складне завдання на простий та елегантний API. Це найпопулярніша бібліотека для завантаження зображень в Android-спільноті.

Архітектура Picasso мінімалістична: бібліотека використовує пул потоків для завантаження, LruCache для кешу в пам’яті та DiskLruCache для дискового кешу. На відміну від Glide, Picasso не потребує налаштування AppGlideModule і готовий до використання одразу після додавання залежності. Це робить його ідеальним вибором для прототипів та невеликих проектів.

Picasso 2.8 — остання стабільна версія, сумісна з Android API 21+ та Java 8+. Бібліотека не потребує конфігурації Gradle-плагінів або анотацій, що спрощує міграцію між версіями та знижує ймовірність помилок при оновленні. Незважаючи на довгу історію, Picasso залишається затребуваним у тисячах проектів по всьому світу.

Основне завдання Picasso — завантажити зображення за URL, декодувати його, змінити розмір при необхідності та відобразити в ImageView. Бібліотека автоматично керує фоновими потоками, кешем та повторним використанням ImageView у списках.

З моменту релізу в 2013 році Picasso став стандартом для завантаження зображень в Android-спільноті. Бібліотека використовується в тисячах додатків завдяки мінімальному порогу входу — для першого використання достатньо одного рядка коду.

Пріоритети та скасування запитів

Пріоритети в Picasso дозволяють керувати порядком завантаження зображень. За замовчуванням всі запити мають нормальний пріоритет, але для критичних зображень можна встановити високий пріоритет через метод priority. Якщо ImageView перевикористовується (наприклад, в RecyclerView), Picasso автоматично скасовує попередній запит та запускає новий, запобігаючи мерехтінню зображень під час прокручування.

Основні можливості Picasso

Picasso пропонує набір функцій, які покривають основні сценарії роботи із зображеннями в мобільних додатках без зайвої складності.

Багаторівневе кешування

Кеш Picasso складається з двох рівнів: оперативна пам’ять для швидкого доступу та диск для постійного зберігання. При запиті зображення бібліотека спочатку перевіряє кеш в пам’яті, потім диск і тільки потім виконує мережевий запит. Це значно прискорює відображення повторно завантажуваних зображень.

Трансформації зображень

Трансформації дозволяють змінити розмір, обрізати або повернути зображення без декодування оригіналу кожного разу. Picasso надає вбудовані трансформації CenterCrop та CenterInside, а також дозволяє створювати кастомні через інтерфейс Transformation. Трансформовані зображення кешуються окремо.

Placeholder та error-зображення

Placeholder відображається під час завантаження зображення з мережі, надаючи користувачу візуальний відгук. Error-зображення показується при збої завантаження. Picasso також підтримує зображення, яке відображається, поки не буде завантажено нову версію, що корисно для оновлюваних аватарів.

Завантаження з різних джерел

Picasso підтримує завантаження зображень з URL, ресурсів, файлів, контент-провайдерів та URI. Метод load() перевантажений для всіх цих типів, і бібліотека автоматично визначає джерело. Для ресурсів та файлів Picasso не виконує мережевий запит, а завантажує дані безпосередньо, що прискорює відображення вбудованої графіки.

Як працює Picasso?

Picasso використовує архітектуру на основі RequestCreator та Dispatcher. Кожен запит створюється через Picasso.get().load() і виконується в пулі потоків. Dispatcher керує чергою запитів, пріоритетами та скасуванням запитів при повторному використанні ImageView.

Архітектура запиту

При виклику into(view) Picasso створює об’єкт Action, який містить URL, трансформації, target та callback. Action поміщається в чергу Dispatcher. Рушій завантажує зображення через Downloader (OkHttp за замовчуванням), декодує Bitmap, застосовує трансформації та віддає результат в UI-потік. Всі зображення автоматично підганяються під розмір ImageView.

java
Picasso.get()
    .load("https://example.com/image.jpg")
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .resize(400, 300)
    .centerCrop()
    .into(imageView)

Встановлення та налаштування Picasso

Встановлення Picasso виконується через Gradle. Бібліотека поширюється через Maven Central і не потребує складної конфігурації. Мінімальна версія Android API — 21.

Додавання залежності

У файл build.gradle рівня модуля додайте implementation «com.squareup.picasso:picasso:2.8». Після синхронізації Gradle Picasso готовий до використання. Для роботи з мережею Picasso автоматично використовує OkHttp, якщо він є в проекті, або вбудований HttpURLConnection.

groovy
dependencies {
    implementation "com.squareup.picasso:picasso:2.8"
}

// Kafka для завантаження з OkHttp (опціонально)
implementation "com.squareup.okhttp3:okhttp:4.12.0"

Індикатор налагодження та кеш

Індикатор налагодження Picasso показує кольоровий трикутник у куті кожного зображення: червоний для мережевого завантаження, синій для дискового кешу, зелений для кешу в пам’яті. Вмикається викликом setIndicatorsEnabled(true) на екземплярі Picasso. Кеш за замовчуванням становить 15% від доступної пам’яті пристрою.

Для налаштування кастомного екземпляра Picasso використовуйте Picasso.Builder. Він дозволяє задати Executor для фонових потоків, Downloader для мережевих запитів, MemoryCache та DiskCache. Кастомний екземпляр особливо корисний в тестах, де можна підмінити Downloader на заглушку, яка повертає зображення без мережевого запиту.

Приклади використання Picasso

Приклади нижче демонструють типові сценарії роботи з Picasso: завантаження простого зображення, використання трансформацій та завантаження в RecyclerView.

Завантаження зображення в ImageView

Базова завантаження в ImageView виконується одним викликом. Picasso автоматично підганяє зображення під розміри view з урахуванням scaleType. Placeholder показується до завершення завантаження, а error — при виникненні помилки з’єднання.

java
Picasso.get()
    .load("https://example.com/photo.jpg")
    .placeholder(R.drawable.loading)
    .error(R.drawable.broken_image)
    .fit()
    .centerCrop()
    .into(imageView)

Застосування кастомної трансформації

BlurTransformation розмиває зображення із заданим радіусом. Кастомні трансформації реалізують інтерфейс Transformation з методом transform. Кеш зберігає результат трансформації під унікальним ключем, щоб не застосовувати її повторно.

java
public class BlurTransformation implements Transformation {
    @Override
    public Bitmap transform(Bitmap source) {
        Bitmap blurred = Bitmap.createBitmap(source);
        RenderScript rs = RenderScript.create(context);
        // застосування розмиття
        source.recycle();
        return blurred;
    }

    @Override
    public String key() {
        return "blur";
    }
}

Завантаження зображень в RecyclerView

В RecyclerView Picasso автоматично скасовує запити для ImageView, які вийшли за межі екрану, та повторно використовує вже завантажені зображення. Це запобігає витокам пам’яті та забезпечує плавне прокручування.

java
public void onBindViewHolder(ViewHolder holder, int position) {
    String url = items.get(position).getImageUrl();
    Picasso.get()
        .load(url)
        .fit()
        .centerCrop()
        .into(holder.imageView);
}

Picasso чи Glide: порівняння бібліотек

Порівняння Picasso та Glide — часте питання при виборі бібліотеки завантаження зображень для Android. Обидві бібліотеки вирішують одне завдання, але мають різні пріоритети та особливості використання.

Picasso краще підходить для проектів, де важлива простота та мінімальний розмір APK. Glide обирають, коли потрібна підтримка GIF, відео-кадрів та максимальна оптимізація пам’яті. Glide автоматично масштабує зображення під точний розмір ImageView, що знижує споживання пам’яті до 50% порівняно з Picasso в деяких сценаріях.

За тестами продуктивності Glide показує кращі результати при роботі з RecyclerView завдяки механізму попереднього завантаження та автоматичному скасуванню запитів при швидкому прокручуванні. Picasso використовує простішу стратегію, що робить його передбачуваним, але менш ефективним на великих обсягах даних.

Picasso фокусується на простоті API та мінімальному розмірі. Glide пропонує ширший функціонал: підтримку GIF, анімованих зображень, відео-кадрів та інтеграцію з життєвим циклом. Glide також ефективніше керує пам’яттю завдяки автоматичному масштабуванню під розмір ImageView.

КритерійPicassoGlide
Розмір бібліотеки~120 КБ~500 КБ
Підтримка GIFНіТак
Відео-кадриНіТак
РозробникSquareGoogle (Bumptech)
APIFluent-ланцюжокRequestBuilder

За даними Android Developer Relations, Glide рекомендується Google як найкраща бібліотека для завантаження зображень у нових проектах. Picasso залишається чудовим вибором для простих проектів, де не потрібні GIF та відео-кадри.

Часті запитання

Чим Picasso відрізняється від Glide?

Picasso менший за розміром і простіший у використанні. Glide підтримує GIF та відео-кадри, ефективніше керує пам’яттю та рекомендується Google. Вибір залежить від потреб проекту в додаткових форматах.

Як очистити кеш Picasso?

Для очищення кешу Picasso використовуйте метод Picasso.get().invalidate(url) для одного зображення або shutdown() для повного очищення. Дисковий кеш видаляється при перевстановленні додатку або через системні налаштування.

Як Picasso обробляє поворот екрану?

Picasso не залежить від повороту екрану. Завантажені зображення зберігаються в кеші та відображаються з нього при перестворенні Activity. Для прискорення використовуйте ViewModel у парі з Picasso для збереження завантажених даних.

Чи можна використовувати Picasso в Kotlin?

Так, Picasso повністю сумісний з Kotlin. Розробники на Kotlin можуть використовувати extension-функції для більш лаконічного синтаксису або застосовувати бібліотеку koptional для обробки null-значень при завантаженні зображень.

Як Picasso керує пам’яттю?

Picasso використовує LruCache для кешу в пам’яті, автоматично очищаючи невикористовувані зображення. Розмір кешу за замовчуванням — 15% від доступної пам’яті додатку. При нестачі пам’яті Picasso звільняє ресурси через onTrimMemory.

Підсумки

  • Picasso — легка бібліотека завантаження зображень від Square з мінімальним API
  • Кешування на диску та в пам’яті з автоматичним керуванням розміром
  • Трансформації CenterCrop, CenterInside та кастомні через інтерфейс Transformation
  • Placeholder та error-зображення для плавного користувацького досвіду
  • Автоматичне скасування запитів в RecyclerView запобігає зайвим завантаженням
  • Індикатор налагодження допомагає візуально визначити джерело зображення
  • Розмір бібліотеки всього 120 КБ — мінімальний вплив на розмір APK

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також