Picasso je knihovna pro načítání obrázků v Android aplikacích vyvinutá společností Square. Knihovna poskytuje jednoduché a výrazné API pro načítání, ukládání do cache a zobrazování grafiky ze sítě. Podle GitHub statistik Picasso byla knihovna stažena více než 100 000krát. Picasso automaticky spravuje paměť a ukládá obrázky do cache na několika úrovních.
Hlavní body
Picasso je knihovna pro asynchronní načítání obrázků v Androidu vytvořená společností Square. Název je odvozen od umělce Pabla Picassa a odráží filozofii knihovny: přeměnit složitý úkol na jednoduché a elegantní API. Je to nejpopulárnější knihovna pro načítání obrázků v komunitě Android.
Architektura Picasso je minimalistická: knihovna používá fond vláken pro načítání, LruCache pro cache v paměti a DiskLruCache pro cache na disku. Na rozdíl od Glide, Picasso nevyžaduje konfiguraci AppGlideModule a je připraven k použití ihned po přidání závislosti. To z něj činí ideální volbu pro prototypy a malé projekty.
Picasso 2.8 — poslední stabilní verze kompatibilní s Android API 21+ a Java 8+. Knihovna nevyžaduje konfiguraci Gradle pluginů nebo anotací, což zjednodušuje migraci mezi verzemi a snižuje riziko chyb při aktualizaci. Navzdory dlouhé historii zůstává Picasso žádaný v tisících projektů po celém světě.
Hlavním úkolem Picasso je načíst obrázek z URL, dekódovat jej, v případě potřeby změnit jeho velikost a zobrazit v ImageView. Knihovna automaticky spravuje vlákna na pozadí, cache a opětovné použití ImageView v seznamech.
Od vydání v roce 2013 se Picasso stal standardem pro načítání obrázků v komunitě Android. Knihovna se používá v tisících aplikací díky minimálnímu vstupnímu prahu — pro první použití stačí jeden řádek kódu.
Priority v Picasso umožňují řídit pořadí načítání obrázků. Ve výchozím nastavení mají všechny požadavky normální prioritu, ale pro kritické obrázky lze nastavit vysokou prioritu pomocí metody priority. Pokud je ImageView znovu použito (např. v RecyclerView), Picasso automaticky zruší předchozí požadavek a spustí nový, čímž zabrání blikání obrázků při rolování.
Picasso nabízí sadu funkcí, které pokrývají základní scénáře práce s obrázky v mobilních aplikacích bez zbytečné složitosti.
Cache Picasso se skládá ze dvou úrovní: operační paměť pro rychlý přístup a disk pro trvalé uložení. Při požadavku na obrázek knihovna nejprve zkontroluje cache v paměti, poté disk a až poté provede síťový požadavek. To výrazně urychluje zobrazování opakovaně načítaných obrázků.
Transformace umožňují změnit velikost, oříznout nebo otočit obrázek bez dekódování originálu pokaždé. Picasso poskytuje vestavěné transformace CenterCrop a CenterInside a také umožňuje vytvářet vlastní transformace prostřednictvím rozhraní Transformation. Transformované obrázky se ukládají do cache samostatně.
Placeholder se zobrazí během načítání obrázku ze sítě a poskytuje uživateli vizuální zpětnou vazbu. Chybový obrázek se zobrazí při selhání načítání. Picasso také podporuje obrázek, který se zobrazí, dokud není načtena nová verze, což je užitečné pro aktualizovatelné avatary.
Picasso podporuje načítání obrázků z URL, zdrojů, souborů, poskytovatelů obsahu a URI. Metoda load() je přetížena pro všechny tyto typy a knihovna automaticky určuje zdroj. Pro zdroje a soubory Picasso neprovádí síťový požadavek, ale načítá data přímo, což urychluje zobrazování vestavěné grafiky.
Picasso používá architekturu založenou na RequestCreator a Dispatcher. Každý požadavek je vytvořen přes Picasso.get().load() a proveden ve fondu vláken. Dispatcher spravuje frontu požadavků, priority a rušení požadavků při opětovném použití ImageView.
Při volání into(view) vytvoří Picasso objekt Action, který obsahuje URL, transformace, target a callback. Action je umístěn do fronty Dispatcheru. Engine načte obrázek přes Downloader (výchozí OkHttp), dekóduje Bitmap, aplikuje transformace a vrátí výsledek do UI vlákna. Všechny obrázky jsou automaticky přizpůsobeny velikosti ImageView.
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
Instalace Picasso se provádí přes Gradle. Knihovna je distribuována přes Maven Central a nevyžaduje složitou konfiguraci. Minimální verze Android API je 21.
Do souboru build.gradle na úrovni modulu přidejte implementation 'com.squareup.picasso:picasso:2.8'. Po synchronizaci Gradle je Picasso připraven k použití. Pro práci se sítí Picasso automaticky používá OkHttp, pokud je v projektu přítomen, nebo vestavěný HttpURLConnection.
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// Kafka pro načítání z OkHttp (volitelné)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
Indikátor ladění Picasso zobrazuje barevný trojúhelník v rohu každého obrázku: červený pro síťové načítání, modrý pro cache na disku, zelený pro cache v paměti. Aktivuje se voláním setIndicatorsEnabled(true) na instanci Picasso. Výchozí cache je 15 % dostupné paměti zařízení.
Pro konfiguraci vlastní instance Picasso použijte Picasso.Builder. Umožňuje nastavit Executor pro vlákna na pozadí, Downloader pro síťové požadavky, MemoryCache a DiskCache. Vlastní instance je užitečná zejména v testech, kde lze Downloader nahradit stubem vracejícím obrázek bez síťového požadavku.
Příklady níže ukazují typické scénáře práce s Picasso: načítání jednoduchého obrázku, použití transformací a načítání v RecyclerView.
Základní načtení do ImageView se provede jedním voláním. Picasso automaticky přizpůsobí obrázek rozměrům view s ohledem na scaleType. Placeholder se zobrazuje do dokončení načítání a error — při chybě připojení.
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
Transformace BlurTransformation rozostří obrázek s daným poloměrem. Vlastní transformace implementují rozhraní Transformation s metodou transform. Cache ukládá výsledek transformace pod unikátním klíčem, aby jej nemusela znovu aplikovat.
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// aplikace rozostření
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
V RecyclerView Picasso automaticky ruší požadavky pro ImageView, které opustily obrazovku, a znovu používá již načtené obrázky. To zabraňuje únikům paměti a zajišťuje plynulé rolování.
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
Srovnání Picasso a Glide je častá otázka při výběru knihovny pro načítání obrázků v Androidu. Obě knihovny řeší stejný úkol, ale mají různé priority a vlastnosti použití.
Picasso je vhodnější pro projekty, kde je důležitá jednoduchost a minimální velikost APK. Glide se volí, když je potřeba podpora GIF, video snímků a maximální optimalizace paměti. Glide automaticky škáluje obrázek na přesnou velikost ImageView, což v některých scénářích snižuje spotřebu paměti až o 50 % ve srovnání s Picassem.
Podle testů výkonu ukazuje Glide lepší výsledky při práci s RecyclerView díky mechanismu přednačítání a automatickému rušení požadavků při rychlém rolování. Picasso používá jednodušší strategii, což jej činí předvídatelným, ale méně efektivním při velkých objemech dat.
Picasso se zaměřuje na jednoduchost API a minimální velikost. Glide nabízí širší funkcionalitu: podporu GIF, animovaných obrázků, video snímků a integraci s životním cyklem. Glide také efektivněji spravuje paměť díky automatickému škálování na velikost ImageView.
| Kritérium | Picasso | Glide |
|---|---|---|
| Velikost knihovny | ~120 KB | ~500 KB |
| Podpora GIF | Ne | Ano |
| Video snímky | Ne | Ano |
| Vývojář | Square | Google (Bumptech) |
| API | Fluent řetězec | RequestBuilder |
Podle Android Developer Relations je Glide doporučován společností Google jako preferovaná knihovna pro načítání obrázků v nových projektech. Picasso zůstává vynikající volbou pro jednoduché projekty, kde nejsou potřeba GIF a video snímky.
Často kladené otázky
Picasso je menší a jednodušší na použití. Glide podporuje GIF a video snímky, efektivněji spravuje paměť a je doporučován Googlem. Výběr závisí na potřebách projektu v oblasti dalších formátů.
Pro vyčištění cache Picasso použijte metodu Picasso.get().invalidate(url) pro jeden obrázek nebo shutdown() pro úplné vyčištění. Disk cache se smaže při přeinstalaci aplikace nebo pomocí systémových nastavení.
Picasso není závislý na rotaci obrazovky. Načtené obrázky jsou uloženy v cache a při obnovení Activity se zobrazují z ní. Pro zrychlení použijte ViewModel společně s Picassem pro uchování načtených dat.
Ano, Picasso je plně kompatibilní s Kotlinem. Vývojáři v Kotlinu mohou používat rozšiřující funkce pro stručnější syntaxi nebo aplikovat knihovnu koptional pro zpracování null hodnot při načítání obrázků.
Picasso používá LruCache pro cache v paměti, automaticky odstraňuje nepoužívané obrázky. Výchozí velikost cache je 15 % dostupné paměti aplikace. Při nedostatku paměti Picasso uvolňuje zdroje pomocí onTrimMemory.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také