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-а, из ресурса, датотека, Content Provider-а и 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 може заменити stub-ом који враћа слику без мрежног захтева.

Примери коришћења 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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође