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 KB~500 KB
Поддержка 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 KB — минимальное влияние на размер APK

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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