Picasso: bu nima, tasvirlarni yuklash va Android ilovalarida ishlash

Muallif: IT Sectr Nashr etilgan: 2026-05-05 O'qish vaqti: 8 daq

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-dan Android uchun oddiy API bilan tasvir yuklash kutubxonasi
  • Keshlash diskda va xotirada takroriy tasvirlarni yuklash vaqtini qisqartiradi
  • Transformatsiyalar Crop, Resize va Rotate tasvirlarga joyida qo'llaniladi
  • Placeholder va xato tasvirlari yuklash vaqtida va xatolikda ko'rsatiladi
  • Yuklash prioritetlari tasvirlarni ko'rsatish tartibini boshqarish imkonini beradi

Picasso nima?

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 va so'rovlarni bekor qilish

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.

Picassoning asosiy imkoniyatlari

Picasso mobil ilovalarda tasvirlar bilan ishlashning asosiy stsenariylarini keraksiz murakkabliksiz qamrab oluvchi funksiyalar to'plamini taklif qiladi.

Ko'p darajali keshlash

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.

Tasvir transformatsiyalari

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 va xato tasvirlari

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.

Turli manbalardan yuklash

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 qanday ishlaydi?

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.

So'rov arxitekturasi

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.

java
Picasso.get()
    .load("https://example.com/image.jpg")
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .resize(400, 300)
    .centerCrop()
    .into(imageView)

Picassoni o'rnatish va sozlash

O'rnatish Picasso Gradle orqali amalga oshiriladi. Kutubxona Maven Central orqali tarqatiladi va murakkab sozlashni talab qilmaydi. Minimal Android API versiyasi 21.

Bog'liqlikni qo'shish

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.

groovy
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 va kesh

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.

Picassodan foydalanish misollari

Misollar quyida Picasso bilan ishlashning odatiy stsenariylarini ko'rsatadi: oddiy tasvirni yuklash, transformatsiyalardan foydalanish va RecyclerView-da yuklash.

Tasvirni ImageView-ga 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.

java
Picasso.get()
    .load("https://example.com/photo.jpg")
    .placeholder(R.drawable.loading)
    .error(R.drawable.broken_image)
    .fit()
    .centerCrop()
    .into(imageView)

Maxsus transformatsiyani qo'llash

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.

java
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 tasvirlarni yuklash

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.

java
public void onBindViewHolder(ViewHolder holder, int position) {
    String url = items.get(position).getImageUrl();
    Picasso.get()
        .load(url)
        .fit()
        .centerCrop()
        .into(holder.imageView);
}

Picasso yoki Glide: kutubxonalarni solishtirish

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.

MezonPicassoGlide
Kutubxona hajmi~120 KB~500 KB
GIF qo'llab-quvvatlashYo'qHa
Video kadrlarYo'qHa
Ishlab chiquvchiSquareGoogle (Bumptech)
APIFluent zanjiriRequestBuilder

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 Glidedan nima bilan farq qiladi?

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.

Picasso keshini qanday tozalash mumkin?

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 aylanishini qanday boshqaradi?

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.

Picasso Kotlin-da ishlatilishi mumkinmi?

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 xotirani qanday boshqaradi?

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

  • Picasso — Square-dan minimal API bilan yengil tasvir yuklash kutubxonasi
  • Keshlash diskda va xotirada avtomatik hajm boshqaruvi bilan
  • Transformatsiyalar CenterCrop, CenterInside va Transformation interfeysi orqali maxsus
  • Placeholder va xato tasvirlari silliq foydalanuvchi tajribasi uchun
  • Avtomatik so'rov bekor qilish RecyclerView-da keraksiz yuklamalarning oldini oladi
  • Debug ko'rsatkichi tasvir manbasini vizual aniqlashga yordam beradi
  • Kutubxona hajmi atigi 120 KB — APK hajmiga minimal ta'sir

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.

Loyihani muhokama qilish

Shuningdek o'qing