Ang Picasso ay isang library para sa pag-load ng mga imahe sa Android application, na binuo ng kumpanyang Square. Ang library ay nagbibigay ng simple at nagpapahayag na API para sa pag-load, pag-cache at pagpapakita ng graphics mula sa network. Ayon sa statistika ng GitHub ng Picasso, ang library ay na-download ng mahigit 100,000 beses. Awtomatikong pinamamahalaan ng Picasso ang memorya at nag-cache ng mga imahe sa maraming antas.
Pangunahing Punto
Picasso ay isang library para sa asynchronous na pag-load ng mga imahe sa Android, na nilikha ng kumpanyang Square. Ang pangalan ay nagmula sa artist na si Pablo Picasso, na sumasalamin sa pilosopiya ng library: gawing simple at eleganteng API ang isang kumplikadong gawain. Ito ang pinakasikat na library para sa pag-load ng mga imahe sa komunidad ng Android.
Ang arkitektura ng Picasso ay minimalistiko: ang library ay gumagamit ng thread pool para sa pag-load, LruCache para sa cache sa memorya at DiskLruCache para sa cache sa disk. Hindi tulad ng Glide, ang Picasso ay hindi nangangailangan ng configuration ng AppGlideModule at handa nang gamitin pagkatapos idagdag ang dependency. Ginagawa nitong perpektong pagpipilian para sa mga prototype at maliliit na proyekto.
Ang Picasso 2.8 — ang huling stable na bersyon, na katugma sa Android API 21+ at Java 8+. Ang library ay hindi nangangailangan ng configuration ng mga Gradle plugin o anotasyon, na pinapasimple ang migration sa pagitan ng mga bersyon at binabawas ang panganib ng mga error sa pag-update. Sa kabila ng mahabang kasaysayan, ang Picasso ay nananatiling hinihiling sa libu-libong proyekto sa buong mundo.
Ang pangunahing gawain ng Picasso ay mag-load ng imahe mula sa URL, i-decode ito, baguhin ang laki kung kinakailangan at ipakita ito sa ImageView. Awtomatikong pinamamahalaan ng library ang mga background thread, cache at muling paggamit ng ImageView sa mga listahan.
Mula nang ilabas noong 2013, ang Picasso ay naging pamantayan para sa pag-load ng mga imahe sa komunidad ng Android. Ang library ay ginagamit sa libu-libong application dahil sa minimal na hadlang sa pagpasok — para sa unang paggamit, sapat na ang isang linya ng code.
Mga Priyoridad sa Picasso ay nagbibigay-daan upang pamahalaan ang pagkakasunod-sunod ng pag-load ng mga imahe. Bilang default, lahat ng request ay may normal na priyoridad, ngunit para sa mga kritikal na imahe ay maaaring itakda ang mataas na priyoridad sa pamamagitan ng priority method. Kung ang ImageView ay muling ginamit (hal., sa RecyclerView), awtomatikong kinakansela ng Picasso ang nakaraang request at magsisimula ng bago, na pumipigil sa pagkutitap ng mga imahe habang nag-scroll.
Picasso ay nag-aalok ng isang hanay ng mga function na sumasaklaw sa mga pangunahing senaryo ng pagtatrabaho sa mga imahe sa mobile application nang walang hindi kinakailangang kumplikado.
Cache ng Picasso ay binubuo ng dalawang antas: RAM para sa mabilis na access at disk para sa permanenteng imbakan. Sa request ng imahe, unang sinusuri ng library ang cache sa memorya, pagkatapos ang disk at pagkatapos lamang nito ay nagsasagawa ng network request. Ito ay makabuluhang nagpapabilis sa pagpapakita ng mga paulit-ulit na na-load na imahe.
Mga Transformation ay nagbibigay-daan upang baguhin ang laki, i-crop o i-rotate ang imahe nang hindi dinedecode ang orihinal bawat pagkakataon. Nagbibigay ang Picasso ng mga built-in na transformation na CenterCrop at CenterInside, at pinapayagan din ang paglikha ng custom na transformation sa pamamagitan ng Transformation interface. Ang mga na-transform na imahe ay hiwalay na naka-cache.
Placeholder ay ipinapakita habang naglo-load ng imahe mula sa network, na nagbibigay sa user ng visual na feedback. Ang error na imahe ay ipinapakita kapag nabigo ang pag-load. Sinusuportahan din ng Picasso ang imahe na ipinapakita hanggang sa ma-load ang bagong bersyon, na kapaki-pakinabang para sa mga ina-update na avatar.
Picasso ay sumusuporta sa pag-load ng mga imahe mula sa URL, resources, file, content provider at URI. Ang load() method ay overloaded para sa lahat ng mga uri na ito, at awtomatikong tinutukoy ng library ang pinagmulan. Para sa resources at file, hindi nagsasagawa ang Picasso ng network request, sa halip ay direktang naglo-load ng data, na nagpapabilis sa pagpapakita ng built-in na graphics.
Picasso ay gumagamit ng arkitektura batay sa RequestCreator at Dispatcher. Bawat request ay nilikha sa pamamagitan ng Picasso.get().load() at isinasagawa sa thread pool. Pinamamahalaan ng Dispatcher ang pila ng request, priyoridad at pagkansela ng request kapag muling ginamit ang ImageView.
Sa pagtawag ng into(view), lumilikha ang Picasso ng Action object na naglalaman ng URL, transformation, target at callback. Ang Action ay inilalagay sa pila ng Dispatcher. Nilo-load ng engine ang imahe sa pamamagitan ng Downloader (default OkHttp), dinedecode ang Bitmap, inilalapat ang mga transformation at ibinabalik ang resulta sa UI thread. Lahat ng imahe ay awtomatikong inaayos sa laki ng ImageView.
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
Pag-install ng Picasso ay ginagawa sa pamamagitan ng Gradle. Ang library ay ipinamamahagi sa pamamagitan ng Maven Central at hindi nangangailangan ng kumplikadong configuration. Ang minimum na bersyon ng Android API ay 21.
Sa file na build.gradle sa antas ng module, idagdag ang implementation 'com.squareup.picasso:picasso:2.8'. Pagkatapos ng Gradle sync, handa nang gamitin ang Picasso. Para sa pagtatrabaho sa network, awtomatikong ginagamit ng Picasso ang OkHttp kung ito ay nasa proyekto, o ang built-in na HttpURLConnection.
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// Kafka para sa pag-load mula sa OkHttp (opsyonal)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
Debug indicator ng Picasso ay nagpapakita ng may kulay na tatsulok sa sulok ng bawat imahe: pula para sa network load, asul para sa disk cache, berde para sa memory cache. Isinaaktibo sa pamamagitan ng pagtawag ng setIndicatorsEnabled(true) sa instance ng Picasso. Ang default na cache ay 15% ng available na memorya ng device.
Para sa configuration ng custom na instance ng Picasso, gamitin ang Picasso.Builder. Pinapayagan nitong itakda ang Executor para sa background thread, Downloader para sa network request, MemoryCache at DiskCache. Ang custom na instance ay lalong kapaki-pakinabang sa mga test, kung saan ang Downloader ay maaaring palitan ng stub na nagbabalik ng imahe nang walang network request.
Mga halimbawa sa ibaba ay nagpapakita ng mga tipikal na senaryo ng pagtatrabaho sa Picasso: pag-load ng simpleng imahe, paggamit ng transformation at pag-load sa RecyclerView.
Base pag-load sa ImageView ay ginagawa sa isang tawag. Awtomatikong inaayos ng Picasso ang imahe sa mga sukat ng view na isinasaalang-alang ang scaleType. Ipinapakita ang Placeholder hanggang sa matapos ang pag-load, at error — kapag may naganap na error sa koneksyon.
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
Transformation BlurTransformation ay nagbablur ng imahe na may tiyak na radius. Ang mga custom na transformation ay nag-iimplementa ng Transformation interface na may transform method. Ine-save ng cache ang resulta ng transformation sa ilalim ng natatanging key upang hindi ito ilapat muli.
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// paglalapat ng blur
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
Sa RecyclerView, awtomatikong kinakansela ng Picasso ang mga request para sa ImageView na lumabas na sa screen at muling ginagamit ang mga na-load nang imahe. Pinipigilan nito ang pagtagas ng memorya at tinitiyak ang maayos na pag-scroll.
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
Paghahambing ng Picasso at Glide ay isang madalas na tanong kapag pumipili ng library para sa pag-load ng imahe sa Android. Pareho ng library ay lumulutas ng parehong gawain, ngunit may magkaibang priyoridad at katangian ng paggamit.
Ang Picasso ay mas angkop para sa mga proyekto kung saan mahalaga ang kasimplehan at minimal na laki ng APK. Ang Glide ay pinipili kapag kailangan ang suporta para sa GIF, video frame at maximum na memory optimization. Awtomatikong ini-scale ng Glide ang imahe sa eksaktong laki ng ImageView, na nagbabawas ng konsumo ng memorya hanggang 50% kumpara sa Picasso sa ilang senaryo.
Ayon sa performance test, ang Glide ay nagpapakita ng mas mahusay na resulta sa pagtatrabaho sa RecyclerView dahil sa mekanismo ng preloading at awtomatikong pagkansela ng request sa mabilis na pag-scroll. Gumagamit ang Picasso ng mas simpleng estratehiya, na ginagawang predictable ngunit hindi gaanong epektibo sa malalaking volume ng data.
Ang Picasso ay nakatuon sa kasimplehan ng API at minimal na laki. Nag-aalok ang Glide ng mas malawak na functionality: suporta para sa GIF, animated na imahe, video frame at integration sa lifecycle. Mas mahusay ding pinamamahalaan ng Glide ang memorya dahil sa awtomatikong pag-scale sa laki ng ImageView.
| Krayterya | Picasso | Glide |
|---|---|---|
| Laki ng Library | ~120 KB | ~500 KB |
| Suporta sa GIF | Hindi | Oo |
| Video Frame | Hindi | Oo |
| Developer | Square | Google (Bumptech) |
| API | Fluent chain | RequestBuilder |
Ayon sa Android Developer Relations, ang Glide ay inirerekomenda ng Google bilang ginustong library para sa pag-load ng imahe sa mga bagong proyekto. Ang Picasso ay nananatiling mahusay na pagpipilian para sa mga simpleng proyekto kung saan hindi kailangan ang GIF at video frame.
Mga Madalas Itanong
Picasso ay mas maliit at mas simple gamitin. Ang Glide ay sumusuporta sa GIF at video frame, mas mahusay na namamahala ng memorya at inirerekomenda ng Google. Ang pagpili ay depende sa pangangailangan ng proyekto para sa mga karagdagang format.
Para sa paglilinis ng cache ng Picasso, gamitin ang method na Picasso.get().invalidate(url) para sa isang imahe o shutdown() para sa buong paglilinis. Ang disk cache ay tinatanggal sa muling pag-install ng application o sa pamamagitan ng system settings.
Picasso ay hindi nakadepende sa screen rotation. Ang mga na-load na imahe ay iniimbak sa cache at ipinapakita mula dito kapag muling ginawa ang Activity. Para mapabilis, gamitin ang ViewModel kasama ng Picasso para sa pag-iimbak ng na-load na data.
Oo, ang Picasso ay ganap na katugma sa Kotlin. Ang mga Kotlin developer ay maaaring gumamit ng extension function para sa mas maikling syntax o ilapat ang library na koptional para sa paghawak ng null value sa pag-load ng imahe.
Picasso ay gumagamit ng LruCache para sa cache sa memorya, awtomatikong naglilinis ng hindi ginagamit na mga imahe. Ang default na laki ng cache ay 15% ng available na memorya ng application. Kapag kulang ang memorya, naglalabas ang Picasso ng resources sa pamamagitan ng onTrimMemory.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din