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 и изображения за грешка се показват по време на зареждане и при грешка
  • Приоритети на зареждане позволяват управление на реда за показване на изображения

Какво е 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 и изображения за грешка

Placeholder се показва по време на зареждане на изображението от мрежата, давайки на потребителя визуална обратна връзка. Изображението за грешка се показва при неуспешно зареждане. 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 автоматично нагажда изображението към размерите на изгледа, като взема предвид 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 разработчиците могат да използват разширяващи функции за по-кратък синтаксис или да приложат библиотеката koptional за обработка на null стойности при зареждане на изображения.

Как Picasso управлява паметта?

Picasso използва LruCache за кеш в паметта, автоматично изчиствайки неизползвани изображения. Размерът на кеша по подразбиране е 15% от наличната памет на приложението. При недостиг на памет, Picasso освобождава ресурси чрез onTrimMemory.

Резюме

  • Picasso — лека библиотека за зареждане на изображения от Square с минимален API
  • Кеширане на диск и в памет с автоматично управление на размера
  • Трансформации CenterCrop, CenterInside и персонализирани чрез интерфейса Transformation
  • Placeholder и изображения за грешка за гладко потребителско изживяване
  • Автоматично отменяне на заявки в RecyclerView предотвратява ненужни зареждания
  • Индикатор за отстраняване на грешки помага визуално да се определи източникът на изображението
  • Размер на библиотеката само 120 KB — минимално влияние върху размера на APK

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

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също