Picasso — Square kompaniyasi tomonidan ishlab chiqilgan Android ilovalarida tasvirlarni yuklash uchun kutubxona. Kutubxona tarmoqdan grafikalarni yuklash, keshlash va ko'rsatish uchun oddiy va ifodali API taqdim etadi. GitHub statistikasiga ko'ra, kutubxona 100 000 dan ortiq marta yuklab olingan. Picasso avtomatik ravishda xotirani boshqaradi va tasvirlarni bir necha darajada keshlaydi.
Asosiy fikrlar
Picasso — Square kompaniyasi tomonidan yaratilgan Android-da asinxron tasvir yuklash kutubxonasi. Nomi rassom Pablo Pikassodan olingan bo'lib, kutubxona falsafasini aks ettiradi: murakkab vazifani oddiy va nafis API-ga aylantirish. Bu Android hamjamiyatida tasvir yuklash uchun eng mashhur kutubxona.
Picasso arxitekturasi minimalistik: kutubxona yuklash uchun threadlar hovuzi, xotira keshi uchun LruCache va disk keshi uchun DiskLruCache dan foydalanadi. Glidedan farqli o'laroq, Picasso AppGlideModule sozlashni talab qilmaydi va bog'liqlik qo'shilgandan so'ng darhol foydalanishga tayyor. Bu uni prototiplar va kichik loyihalar uchun ideal tanlov qiladi.
Picasso 2.8 — Android API 21+ va Java 8+ bilan mos keladigan so'nggi barqaror versiya. Kutubxona Gradle plaginlari yoki annotatsiyalarni sozlashni talab qilmaydi, bu versiyalar o'rtasida migratsiyani soddalashtiradi va yangilashda xatolik xavfini kamaytiradi. Uzoq tarixiga qaramay, Picasso butun dunyo bo'ylab minglab loyihalarda talab qilinmoqda.
Picassoning asosiy vazifasi URL orqali tasvirni yuklash, uni dekodlash, kerak bo'lsa hajmini o'zgartirish va ImageView-da ko'rsatishdir. Kutubxona avtomatik ravishda fon threadlarini, keshni va ro'yxatlarda ImageView-ning qayta ishlatilishini boshqaradi.
2013-yilda chiqarilganidan beri Picasso Android hamjamiyatida tasvir yuklash standartiga aylandi. Kutubxona minglab ilovalarda qo'llaniladi, chunki birinchi foydalanish uchun bir qator kod kifoya qiladi.
Prioritetlar Picasso-da tasvirlarni yuklash tartibini boshqarish imkonini beradi. Barcha so'rovlar sukut bo'yicha normal prioritetga ega, ammo muhim tasvirlar uchun priority metodi orqali yuqori prioritet o'rnatilishi mumkin. Agar ImageView qayta ishlatilsa (masalan, RecyclerView-da), Picasso avtomatik ravishda oldingi so'rovni bekor qiladi va yangisini boshlaydi, aylantirishda tasvirlarning miltillashining oldini oladi.
Picasso mobil ilovalarda tasvirlar bilan ishlashning asosiy stsenariylarini keraksiz murakkabliksiz qamrab oluvchi funksiyalar to'plamini taklif qiladi.
Kesh Picasso ikki darajadan iborat: tezkor kirish uchun operativ xotira va doimiy saqlash uchun disk. Tasvir so'rovida kutubxona avval xotira keshini, keyin diskni va faqat undan keyin tarmoq so'rovini bajaradi. Bu takroriy yuklanadigan tasvirlarni ko'rsatishni sezilarli darajada tezlashtiradi.
Transformatsiyalar har safar asl nusxani dekodlamasdan tasvir hajmini o'zgartirish, kesish yoki aylantirish imkonini beradi. Picasso o'rnatilgan CenterCrop va CenterInside transformatsiyalarini taqdim etadi, shuningdek Transformation interfeysi orqali maxsus transformatsiyalar yaratishga imkon beradi. Transformatsiya qilingan tasvirlar alohida keshlanadi.
Placeholder tarmoqdan tasvir yuklanayotganda ko'rsatiladi, foydalanuvchiga vizual javob beradi. Xato tasviri yuklash muvaffaqiyatsiz bo'lganda ko'rsatiladi. Picasso shuningdek, yangi versiya yuklanmaguncha ko'rsatiladigan tasvirni qo'llab-quvvatlaydi, bu yangilanadigan avatarlar uchun foydali.
Picasso URL, resurslar, fayllar, content providerlar va URI dan tasvir yuklashni qo'llab-quvvatlaydi. load() metodi barcha bu turlar uchun overload qilingan va kutubxona manbani avtomatik aniqlaydi. Resurslar va fayllar uchun Picasso tarmoq so'rovini bajarmaydi, ma'lumotlarni to'g'ridan-to'g'ri yuklaydi, bu ichki grafikalarni ko'rsatishni tezlashtiradi.
Picasso RequestCreator va Dispatcher asosidagi arxitekturadan foydalanadi. Har bir so'rov Picasso.get().load() orqali yaratiladi va threadlar hovuzida bajariladi. Dispatcher so'rovlar navbatini, prioritetlarni va ImageView qayta ishlatilganda so'rovlarni bekor qilishni boshqaradi.
into(view) chaqirilganda, Picasso URL, transformatsiyalar, target va callback ni o'z ichiga olgan Action obyektini yaratadi. Action Dispatcher navbatiga joylashtiriladi. Dvigatel tasvirni Downloader (sukut bo'yicha OkHttp) orqali yuklaydi, Bitmap-ni dekodlaydi, transformatsiyalarni qo'llaydi va natijani UI thread-ga qaytaradi. Barcha tasvirlar avtomatik ravishda ImageView hajmiga moslashtiriladi.
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
O'rnatish Picasso Gradle orqali amalga oshiriladi. Kutubxona Maven Central orqali tarqatiladi va murakkab sozlashni talab qilmaydi. Minimal Android API versiyasi 21.
build.gradle modul darajasidagi fayliga implementation 'com.squareup.picasso:picasso:2.8' qo'shing. Gradle sinxronizatsiyasidan so'ng Picasso foydalanishga tayyor. Tarmoq bilan ishlash uchun Picasso avtomatik ravishda loyihada mavjud bo'lsa OkHttp, aks holda o'rnatilgan HttpURLConnection dan foydalanadi.
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// OkHttp dan yuklash uchun Kafka (ixtiyoriy)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
Debug ko'rsatkichi Picasso har bir tasvirning burchagida rangli uchburchak ko'rsatadi: qizil tarmoq yuklamasi, ko'k disk keshi, yashil xotira keshi uchun. Picasso misolida setIndicatorsEnabled(true) chaqirish orqali yoqiladi. Sukut bo'yicha kesh qurilmaning mavjud xotirasining 15% ni tashkil qiladi.
Maxsus Picasso misolini sozlash uchun Picasso.Builder dan foydalaning. U fon threadlari uchun Executor, tarmoq so'rovlari uchun Downloader, MemoryCache va DiskCache o'rnatish imkonini beradi. Maxsus misol, ayniqsa, Downloader-ni tarmoq so'rovsisiz tasvir qaytaradigan stub bilan almashtirish mumkin bo'lgan testlarda foydali.
Misollar quyida Picasso bilan ishlashning odatiy stsenariylarini ko'rsatadi: oddiy tasvirni yuklash, transformatsiyalardan foydalanish va RecyclerView-da yuklash.
Asosiy yuklash ImageView-ga bir chaqiruv bilan amalga oshiriladi. Picasso avtomatik ravishda tasvirni scaleType ni hisobga olgan holda view o'lchamlariga moslashtiradi. Placeholder yuklash tugaguncha, error esa ulanish xatosi paytida ko'rsatiladi.
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
Transformatsiya BlurTransformation tasvirni berilgan radius bilan xiralashtiradi. Maxsus transformatsiyalar transform metodi bilan Transformation interfeysini amalga oshiradi. Kesh transformatsiya natijasini noyob kalit ostida saqlaydi, uni qayta qo'llamaslik uchun.
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// xiralikni qo'llash
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
RecyclerView-da Picasso avtomatik ravishda ekrandan chiqqan ImageView-lar uchun so'rovlarni bekor qiladi va allaqachon yuklangan tasvirlarni qayta ishlatadi. Bu xotira oqishining oldini oladi va silliq aylantirishni ta'minlaydi.
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
Solishtirish Picasso va Glide Android-da tasvir yuklash kutubxonasini tanlashda tez-tez beriladigan savol. Ikkala kutubxona bir vazifani hal qiladi, lekin turli prioritetlar va foydalanish xususiyatlariga ega.
Picasso soddalik va minimal APK hajmi muhim bo'lgan loyihalar uchun ko'proq mos keladi. Glide GIF qo'llab-quvvatlash, video kadrlar va maksimal xotira optimallashtirish kerak bo'lganda tanlanadi. Glide tasvirni avtomatik ravishda ImageView-ning aniq hajmiga masshtablaydi, bu ba'zi stsenariylarda Picasso bilan solishtirganda xotira sarfini 50% gacha kamaytiradi.
Ishlash testlariga ko'ra, Glide RecyclerView bilan ishlashda oldindan yuklash mexanizmi va tez aylantirishda so'rovlarni avtomatik bekor qilish tufayli yaxshiroq natijalar ko'rsatadi. Picasso soddaroq strategiyadan foydalanadi, bu uni bashorat qilish mumkin, ammo katta hajmdagi ma'lumotlarda kamroq samarali qiladi.
Picasso API soddaligiga va minimal hajmga e'tibor qaratadi. Glide kengroq funksionallikni taklif qiladi: GIF qo'llab-quvvatlash, animatsion tasvirlar, video kadrlar va hayot sikli bilan integratsiya. Glide shuningdek, ImageView hajmiga avtomatik masshtablash tufayli xotirani samaraliroq boshqaradi.
| Mezon | Picasso | Glide |
|---|---|---|
| Kutubxona hajmi | ~120 KB | ~500 KB |
| GIF qo'llab-quvvatlash | Yo'q | Ha |
| Video kadrlar | Yo'q | Ha |
| Ishlab chiquvchi | Square | Google (Bumptech) |
| API | Fluent zanjiri | RequestBuilder |
Android Developer Relations ma'lumotlariga ko'ra, Glide Google tomonidan yangi loyihalarda tasvir yuklash uchun afzal qilingan kutubxona sifatida tavsiya etiladi. Picasso GIF va video kadrlar kerak bo'lmagan oddiy loyihalar uchun ajoyib tanlov bo'lib qolmoqda.
Tez-tez beriladigan savollar
Picasso hajmi kichikroq va foydalanish osonroq. Glide GIF va video kadrlarni qo'llab-quvvatlaydi, xotirani samaraliroq boshqaradi va Google tomonidan tavsiya etiladi. Tanlov loyihaning qo'shimcha formatlarga bo'lgan ehtiyojiga bog'liq.
Keshni tozalash uchun bitta tasvir uchun Picasso.get().invalidate(url) yoki to'liq tozalash uchun shutdown() metodidan foydalaning. Disk keshi ilovani qayta o'rnatish yoki tizim sozlamalari orqali o'chiriladi.
Picasso ekran aylanishiga bog'liq emas. Yuklangan tasvirlar keshda saqlanadi va Activity qayta yaratilganda undan ko'rsatiladi. Tezlashtirish uchun ViewModel-ni Picasso bilan birga yuklangan ma'lumotlarni saqlash uchun foydalaning.
Ha, Picasso Kotlin bilan to'liq mos keladi. Kotlin dasturchilari qisqaroq sintaksis uchun extension funksiyalaridan yoki tasvir yuklashda null qiymatlarni boshqarish uchun koptional kutubxonasidan foydalanishlari mumkin.
Picasso xotira keshi uchun LruCache dan foydalanadi, foydalanilmayotgan tasvirlarni avtomatik tozalaydi. Standart kesh hajmi ilovaning mavjud xotirasining 15% ni tashkil qiladi. Xotira yetishmovchiligi bo'lganda, Picasso onTrimMemory orqali resurslarni bo'shatadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.