A Picasso egy könyvtár képek betöltéséhez Android-alkalmazásokban, amelyet a Square fejlesztett. A könyvtár egyszerű és kifejező API-t biztosít a grafika betöltéséhez, gyorsítótárazásához és megjelenítéséhez a hálózatból. A GitHub-statisztikák szerint a könyvtárat több mint 100 000 alkalommal töltötték le. A Picasso automatikusan kezeli a memóriát és több szinten gyorsítótárazza a képeket.
Főbb pontok
Picasso egy aszinkron képbetöltő könyvtár Androidhoz, amelyet a Square hozott létre. Nevét Pablo Picasso művészről kapta, tükrözve a könyvtár filozófiáját: egy összetett feladatot egyszerű és elegáns API-vá alakítani. Ez a legnépszerűbb könyvtár a képek betöltésére az Android közösségben.
A Picasso architektúrája minimalista: a könyvtár szálpoolt használ a betöltéshez, LruCache-t a memória gyorsítótárhoz és DiskLruCache-t a lemez gyorsítótárhoz. A Glide-dal ellentétben a Picasso nem igényli az AppGlideModule konfigurálását, és a függőség hozzáadása után azonnal használható. Ez ideális választássá teszi prototípusokhoz és kis projektekhez.
Picasso 2.8 — az utolsó stabil verzió, kompatibilis az Android API 21+ és Java 8+ verziókkal. A könyvtár nem igényli a Gradle pluginok vagy annotációk konfigurálását, ami leegyszerűsíti a verziók közötti migrációt és csökkenti a frissítések során előforduló hibák kockázatát. Hosszú története ellenére a Picasso továbbra is keresett világszerte több ezer projektben.
A Picasso fő feladata, hogy betöltsön egy képet URL-ről, dekódolja, szükség esetén átméretezze és megjelenítse az ImageView-ban. A könyvtár automatikusan kezeli a háttérszálakat, a gyorsítótárat és az ImageView újrafelhasználását listákban.
A 2013-as megjelenése óta a Picasso a képbetöltés standardjává vált az Android közösségben. A könyvtárat több ezer alkalmazásban használják a minimális belépési küszöbnek köszönhetően — az első használathoz elegendő egyetlen kódsor.
Prioritások a Picasso-ban lehetővé teszik a képek betöltési sorrendjének kezelését. Alapértelmezés szerint minden kérés normál prioritású, de a kritikus képekhez magas prioritás állítható be a priority metódussal. Ha az ImageView újrahasznosításra kerül (pl. RecyclerView-ban), a Picasso automatikusan megszakítja az előző kérést és elindít egy újat, megakadályozva a képek villogását görgetés közben.
Picasso olyan funkciókészletet kínál, amely lefedi a képekkel való munka alapvető forgatókönyveit mobilos alkalmazásokban, szükségtelen bonyolultság nélkül.
Gyorsítótár a Picasso-ban két szintből áll: operatív memória a gyors eléréshez és lemez az állandó tároláshoz. Kép kérésekor a könyvtár először a memória gyorsítótárat ellenőrzi, majd a lemezt, és csak ezután hajt végre hálózati kérést. Ez jelentősen felgyorsítja a többször betöltött képek megjelenítését.
Transzformációk lehetővé teszik a kép átméretezését, vágását vagy elforgatását anélkül, hogy minden alkalommal dekódolni kellene az eredetit. A Picasso beépített CenterCrop és CenterInside transzformációkat kínál, valamint lehetővé teszi egyéni transzformációk létrehozását a Transformation interfészen keresztül. A transzformált képek külön kerülnek gyorsítótárazásra.
Placeholder jelenik meg a kép hálózatból történő betöltése közben, vizuális visszajelzést adva a felhasználónak. A hiba kép akkor jelenik meg, ha a betöltés sikertelen. A Picasso támogat egy olyan képet is, amely addig jelenik meg, amíg az új verzió be nem töltődik, ami hasznos a frissíthető avatárok esetében.
Picasso támogatja a képek betöltését URL-ről, erőforrásokból, fájlokból, tartalomszolgáltatókból és URI-ból. A load() metódus túlterhelt mindezen típusokra, és a könyvtár automatikusan meghatározza a forrást. Erőforrások és fájlok esetén a Picasso nem hajt végre hálózati kérést, hanem közvetlenül tölti be az adatokat, ami felgyorsítja a beépített grafika megjelenítését.
Picasso RequestCreator és Dispatcher alapú architektúrát használ. Minden kérés a Picasso.get().load()-on keresztül jön létre és egy szálpoolban hajtódik végre. A Dispatcher kezeli a kérési sort, a prioritásokat és a kérések megszakítását az ImageView újrafelhasználásakor.
Az into(view) meghívásakor a Picasso létrehoz egy Action objektumot, amely tartalmazza az URL-t, transzformációkat, target-et és callback-et. Az Action a Dispatcher sorába kerül. A motor betölti a képet a Downloaderen keresztül (alapértelmezett OkHttp), dekódolja a Bitmap-et, alkalmazza a transzformációkat és visszaadja az eredményt az UI szálnak. Minden kép automatikusan az ImageView méretéhez igazodik.
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
Telepítés a Picasso Gradle-en keresztül történik. A könyvtár a Maven Centralen keresztül terjeszthető, és nem igényel bonyolult konfigurációt. A minimális Android API verzió 21.
A modul szintű build.gradle fájlba adja hozzá az implementation 'com.squareup.picasso:picasso:2.8' sort. A Gradle szinkronizálása után a Picasso használatra kész. A hálózati működéshez a Picasso automatikusan használja az OkHttp-t, ha az jelen van a projektben, vagy a beépített HttpURLConnection-t.
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// Kafka az OkHttp-ből történő betöltéshez (opcionális)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
Debug jelző a Picasso színes háromszöget jelenít meg minden kép sarkában: piros a hálózati betöltéshez, kék a lemez gyorsítótárhoz, zöld a memória gyorsítótárhoz. A setIndicatorsEnabled(true) meghívásával aktiválható a Picasso példányon. Az alapértelmezett gyorsítótár az eszköz rendelkezésre álló memóriájának 15%-a.
Egyéni Picasso példány konfigurálásához használja a Picasso.Builder-t. Ez lehetővé teszi az Executor beállítását a háttérszálakhoz, a Downloader-t a hálózati kérésekhez, a MemoryCache-t és a DiskCache-t. Az egyéni példány különösen hasznos tesztekben, ahol a Downloader helyettesíthető egy stub-bal, amely hálózati kérés nélkül ad vissza képet.
Példák alább bemutatják a tipikus forgatókönyveket a Picasso-val való munkához: egyszerű kép betöltése, transzformációk használata és betöltés RecyclerView-ban.
Az alap betöltés ImageView-ba egyetlen hívással történik. A Picasso automatikusan igazítja a képet a view méreteihez, figyelembe véve a scaleType-t. A Placeholder a betöltés befejezéséig jelenik meg, az error pedig kapcsolati hiba esetén.
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
Transzformáció BlurTransformation elmossa a képet egy adott sugárral. Az egyéni transzformációk megvalósítják a Transformation interfészt a transform metódussal. A gyorsítótár egyedi kulcs alatt tárolja a transzformáció eredményét, hogy ne kelljen újra alkalmazni.
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// elmosás alkalmazása
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
RecyclerView-ban a Picasso automatikusan megszakítja a képernyőn kívülre került ImageView-ek kéréseit, és újra felhasználja a már betöltött képeket. Ez megakadályozza a memóriaszivárgást és biztosítja a gördülékeny görgetést.
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
Összehasonlítás a Picasso és a Glide között gyakori kérdés a képbetöltő könyvtár kiválasztásakor Androidon. Mindkét könyvtár ugyanazt a feladatot oldja meg, de eltérő prioritásokkal és használati jellemzőkkel rendelkezik.
A Picasso olyan projektekhez alkalmasabb, ahol fontos az egyszerűség és a minimális APK-méret. A Glide-ot akkor választják, ha GIF-támogatásra, videó képkockákra és maximális memóriaoptimalizálásra van szükség. A Glide automatikusan a ImageView pontos méretére skálázza a képet, ami bizonyos forgatókönyvekben akár 50%-kal csökkenti a memóriafogyasztást a Picasso-hoz képest.
Teljesítménytesztek szerint a Glide jobb eredményeket mutat a RecyclerView-val való munka során az előtöltési mechanizmusnak és a gyors görgetéskor történő automatikus kérésmegszakításnak köszönhetően. A Picasso egyszerűbb stratégiát használ, ami kiszámíthatóvá, de nagy adatmennyiségeknél kevésbé hatékonnyá teszi.
A Picasso az API egyszerűségére és a minimális méretre összpontosít. A Glide szélesebb funkcionalitást kínál: GIF-támogatást, animált képeket, videó képkockákat és életciklus-integrációt. A Glide a memóriát is hatékonyabban kezeli az ImageView méretére történő automatikus skálázásnak köszönhetően.
| Kritérium | Picasso | Glide |
|---|---|---|
| Könyvtár mérete | ~120 KB | ~500 KB |
| GIF-támogatás | Nem | Igen |
| Videó képkockák | Nem | Igen |
| Fejlesztő | Square | Google (Bumptech) |
| API | Fluent lánc | RequestBuilder |
Az Android Developer Relations szerint a Glide-ot ajánlja a Google preferált könyvtárként a képek betöltéséhez új projektekben. A Picasso továbbra is kiváló választás egyszerű projektekhez, ahol nincs szükség GIF-re és videó képkockákra.
Gyakran Ismételt Kérdések
Picasso kisebb méretű és egyszerűbb használni. A Glide támogatja a GIF-et és a videó képkockákat, hatékonyabban kezeli a memóriát és a Google ajánlja. A választás a projekt további formátumok iránti igényétől függ.
A gyorsítótár törléséhez használja a Picasso.get().invalidate(url) metódust egyetlen képhez vagy a shutdown()-ot a teljes törléshez. A lemez gyorsítótár az alkalmazás újratelepítésekor vagy a rendszerbeállításokon keresztül törlődik.
Picasso nem függ a képernyő elforgatásától. A betöltött képek a gyorsítótárban tárolódnak és onnan jelennek meg az Activity újralétrehozásakor. A gyorsításhoz használja a ViewModel-t a Picasso-val együtt a betöltött adatok tárolására.
Igen, a Picasso teljes mértékben kompatibilis a Kotlinnal. A Kotlin fejlesztők használhatnak kiterjesztési függvényeket a tömörebb szintaxishoz vagy alkalmazhatják a koptional könyvtárat a null értékek kezelésére a képek betöltésekor.
Picasso LruCache-t használ a memória gyorsítótárhoz, automatikusan törölve a nem használt képeket. Az alapértelmezett gyorsítótár mérete az alkalmazás rendelkezésre álló memóriájának 15%-a. Memóriahiány esetén a Picasso az onTrimMemory-n keresztül szabadít fel erőforrásokat.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is