Picasso: bu nədir, şəkillərin yüklənməsi və Android tətbiqlərində işləmə

Müəllif: IT Sectr Dərc olunub: 2026-05-05 Oxuma vaxtı: 8 dəq

Picasso, Square şirkəti tərəfindən hazırlanmış Android tətbiqlərində şəkilləri yükləmək üçün bir kitabxanadır. Kitabxana şəbəkədən qrafiklərin yüklənməsi, keşlənməsi və göstərilməsi üçün sadə və ifadəli API təqdim edir. GitHub statistikasına görə, kitabxana 100 000-dən çox dəfə endirilib. Picasso avtomatik olaraq yaddaşı idarə edir və şəkilləri bir neçə səviyyədə keşləyir.

Əsas məqamlar

  • Picasso — Square-dən Android üçün sadə API ilə şəkil yükləmə kitabxanası
  • Keşləmə diskdə və yaddaşda təkrar şəkillərin yüklənmə vaxtını azaldır
  • Transformasiyalar Crop, Resize və Rotate şəkillərə anında tətbiq olunur
  • Placeholder və xəta şəkilləri yükləmə zamanı və xəta olduqda göstərilir
  • Yükləmə prioritetləri şəkillərin göstərilmə sırasını idarə etməyə imkan verir

Picasso nədir?

Picasso Square şirkəti tərəfindən yaradılmış Android-də asinxron şəkil yükləmə kitabxanasıdır. Adını rəssam Pablo Pikassodan alaraq kitabxananın fəlsəfəsini əks etdirir: mürəkkəb işi sadə və zərif API-ə çevirmək. Bu, Android icmasında şəkil yükləmək üçün ən məşhur kitabxanadır.

Picasso arxitekturası minimalistdir: kitabxana yükləmə üçün thread hovuzu, yaddaş keşi üçün LruCache və disk keşi üçün DiskLruCache istifadə edir. Glide-dən fərqli olaraq, Picasso AppGlideModule konfiqurasiyası tələb etmir və asılılıq əlavə edildikdən dərhal sonra istifadəyə hazırdır. Bu, onu prototiplər və kiçik layihələr üçün ideal seçim edir.

Picasso 2.8 — Android API 21+ və Java 8+ ilə uyğun olan son sabit versiyadır. Kitabxana Gradle plaginləri və ya annotasiyaların konfiqurasiyasını tələb etmir, bu da versiyalar arasında miqrasiyanı asanlaşdırır və yeniləmə zamanı səhv riskini azaldır. Uzun tarixinə baxmayaraq, Picasso dünyada minlərlə layihədə tələb olunmağa davam edir.

Picasso-nun əsas vəzifəsi URL-dən şəkli yükləmək, onu dekodlaşdırmaq, lazım olduqda ölçüsünü dəyişmək və ImageView-də göstərməkdir. Kitabxana avtomatik olaraq fon thread-lərini, keşi və siyahılarda ImageView-in təkrar istifadəsini idarə edir.

2013-cü ildə buraxılışından bəri Picasso Android icmasında şəkil yükləmə standartına çevrilib. Kitabxana minlərlə tətbiqdə istifadə olunur, çünki ilk istifadə üçün bir sətir kod kifayətdir.

Prioritetlər və sorğuların ləğvi

Prioritetlər Picasso-da şəkillərin yüklənmə sırasını idarə etməyə imkan verir. Bütün sorğular standart olaraq normal prioritetə malikdir, lakin kritik şəkillər üçün priority metodu ilə yüksək prioritet təyin edilə bilər. ImageView təkrar istifadə olunarsa (məsələn, RecyclerView-də), Picasso avtomatik olaraq əvvəlki sorğunu ləğv edir və yenisini başladır, sürüşdürmə zamanı şəkillərin titrəməsinin qarşısını alır.

Picasso-nun əsas imkanları

Picasso mobil tətbiqlərdə şəkillərlə işin əsas ssenarilərini lazımsız mürəkkəblik olmadan əhatə edən funksiyalar dəsti təklif edir.

Çoxsəviyyəli keşləmə

Keş Picasso iki səviyyədən ibarətdir: sürətli giriş üçün operativ yaddaş və daimi saxlama üçün disk. Şəkil sorğusu zamanı kitabxana əvvəlcə yaddaş keşini, sonra diski yoxlayır və yalnız bundan sonra şəbəkə sorğusu edir. Bu, təkrar yüklənən şəkillərin göstərilməsini əhəmiyyətli dərəcədə sürətləndirir.

Şəkil transformasiyaları

Transformasiyalar hər dəfə orijinalı dekodlaşdırmadan şəklin ölçüsünü dəyişməyə, kəsməyə və ya çevirməyə imkan verir. Picasso daxili CenterCrop və CenterInside transformasiyalarını təqdim edir, həmçinin Transformation interfeysi vasitəsilə xüsusi transformasiyalar yaratmağa imkan verir. Transformasiya olunmuş şəkillər ayrıca keşlənir.

Placeholder və xəta şəkilləri

Placeholder şəbəkədən şəkil yüklənərkən göstərilir, istifadəçiyə vizual cavab verir. Xəta şəkli yükləmə uğursuz olduqda göstərilir. Picasso həmçinin yeni versiya yüklənənə qədər göstərilən şəkli dəstəkləyir, bu yenilənən avatarlar üçün faydalıdır.

Müxtəlif mənbələrdən yükləmə

Picasso URL, resurslar, fayllar, content provider-lər və URI-dən şəkil yükləməyi dəstəkləyir. load() metodu bütün bu tiplər üçün overload edilib və kitabxana mənbəni avtomatik müəyyən edir. Resurslar və fayllar üçün Picasso şəbəkə sorğusu etmir, məlumatları birbaşa yükləyir, bu da daxili qrafiklərin göstərilməsini sürətləndirir.

Picasso necə işləyir?

Picasso RequestCreator və Dispatcher əsaslı arxitekturadan istifadə edir. Hər sorğu Picasso.get().load() vasitəsilə yaradılır və thread hovuzunda icra olunur. Dispatcher sorğu növbəsini, prioritetləri və ImageView-in təkrar istifadəsi zamanı sorğuların ləğvini idarə edir.

Sorğu arxitekturası

into(view) çağırıldıqda Picasso URL, transformasiyalar, target və callback olan Action obyekti yaradır. Action Dispatcher növbəsinə yerləşdirilir. Mühərrik şəkli Downloader (standart OkHttp) vasitəsilə yükləyir, Bitmap-i dekodlaşdırır, transformasiyaları tətbiq edir və nəticəni UI thread-ə qaytarır. Bütün şəkillər avtomatik olaraq ImageView ölçüsünə uyğunlaşdırılır.

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

Picasso-nun quraşdırılması və konfiqurasiyası

Quraşdırma Picasso Gradle vasitəsilə həyata keçirilir. Kitabxana Maven Central vasitəsilə yayılır və mürəkkəb konfiqurasiya tələb etmir. Minimum Android API versiyası 21-dir.

Asılılığın əlavə edilməsi

build.gradle modul səviyyəli faylına implementation 'com.squareup.picasso:picasso:2.8' əlavə edin. Gradle sinxronizasiyasından sonra Picasso istifadəyə hazırdır. Şəbəkə ilə iş üçün Picasso avtomatik olaraq layihədə varsa OkHttp, yoxsa daxili HttpURLConnection istifadə edir.

groovy
dependencies {
    implementation "com.squareup.picasso:picasso:2.8"
}

// OkHttp-dən yükləmə üçün Kafka (istəyə bağlı)
implementation "com.squareup.okhttp3:okhttp:4.12.0"

Debug göstəricisi və keş

Debug göstəricisi Picasso hər şəklin küncündə rəngli üçbucaq göstərir: qırmızı şəbəkə yükləməsi, mavi disk keşi, yaşıl yaddaş keşi üçün. Picasso nümunəsində setIndicatorsEnabled(true) çağırmaqla aktivləşdirilir. Standart keş cihazın mövcud yaddaşının 15%-ni təşkil edir.

Xüsusi Picasso nümunəsini konfiqurasiya etmək üçün Picasso.Builder istifadə edin. O, fon thread-ləri üçün Executor, şəbəkə sorğuları üçün Downloader, MemoryCache və DiskCache təyin etməyə imkan verir. Xüsusi nümunə xüsusilə testlərdə faydalıdır, burada Downloader şəbəkə sorğusu olmadan şəkil qaytaran stub ilə əvəz edilə bilər.

Picasso istifadə nümunələri

Nümunələr aşağıda Picasso ilə işin tipik ssenarilərini göstərir: sadə şəklin yüklənməsi, transformasiyalardan istifadə və RecyclerView-də yükləmə.

Şəklin ImageView-ə yüklənməsi

Əsas yükləmə ImageView-ə bir çağırışla yerinə yetirilir. Picasso avtomatik olaraq şəkli scaleType nəzərə alaraq görünüş ölçülərinə uyğunlaşdırır. Placeholder yükləmə tamamlanana qədər, error isə əlaqə xətası zamanı göstərilir.

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

Xüsusi transformasiyanın tətbiqi

Transformasiya BlurTransformation şəkli müəyyən radiusla bulandırır. Xüsusi transformasiyalar transform metodu ilə Transformation interfeysini reallaşdırır. Keş transformasiya nəticəsini unikal açar altında saxlayır ki, təkrar tətbiq olunmasın.

java
public class BlurTransformation implements Transformation {
    @Override
    public Bitmap transform(Bitmap source) {
        Bitmap blurred = Bitmap.createBitmap(source);
        RenderScript rs = RenderScript.create(context);
        // bulanıqlığın tətbiqi
        source.recycle();
        return blurred;
    }

    @Override
    public String key() {
        return "blur";
    }
}

RecyclerView-də şəkillərin yüklənməsi

RecyclerView-də Picasso avtomatik olaraq ekrandan çıxan ImageView-lər üçün sorğuları ləğv edir və artıq yüklənmiş şəkilləri təkrar istifadə edir. Bu, yaddaş sızmalarının qarşısını alır və hamar sürüşdürmə təmin edir.

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

Picasso vs Glide: kitabxanaların müqayisəsi

Müqayisə Picasso və Glide Android-də şəkil yükləmə kitabxanası seçərkən tez-tez verilən sualdır. Hər iki kitabxana eyni vəzifəni həll edir, lakin fərqli prioritetlərə və istifadə xüsusiyyətlərinə malikdir.

Picasso sadəlik və minimal APK ölçüsünün vacib olduğu layihələr üçün daha uyğundur. Glide GIF dəstəyi, video kadrlar və maksimum yaddaş optimallaşdırması lazım olduqda seçilir. Glide şəkli avtomatik olaraq ImageView-in dəqiq ölçüsünə miqyaslayır, bu da bəzi ssenarilərdə Picasso ilə müqayisədə yaddaş istehlakını 50%-ə qədər azaldır.

Performans testlərinə görə Glide RecyclerView ilə işdə ön yükləmə mexanizmi və sürətli sürüşdürmə zamanı sorğuların avtomatik ləğvi sayəsində daha yaxşı nəticələr göstərir. Picasso daha sadə strategiya istifadə edir, bu da onu proqnozlaşdırıla bilən, lakin böyük verilən həcmlərində daha az səmərəli edir.

Picasso API sadəliyinə və minimal ölçüyə diqqət yetirir. Glide daha geniş funksionallıq təklif edir: GIF dəstəyi, animasiyalı şəkillər, video kadrlar və həyat dövrü ilə inteqrasiya. Glide həmçinin ImageView ölçüsünə avtomatik miqyaslama sayəsində yaddaşı daha səmərəli idarə edir.

MeyarPicassoGlide
Kitabxana ölçüsü~120 KB~500 KB
GIF dəstəyiXeyrBəli
Video kadrlarXeyrBəli
TərtibatçıSquareGoogle (Bumptech)
APIFluent zənciriRequestBuilder

Android Developer Relations məlumatlarına görə, Glide Google tərəfindən yeni layihələrdə şəkil yükləmək üçün üstünlük verilən kitabxana kimi tövsiyə olunur. Picasso GIF və video kadrların lazım olmadığı sadə layihələr üçün əla seçim olaraq qalır.

Tez-tez verilən suallar

Picasso Glide-dən nə ilə fərqlənir?

Picasso daha kiçik ölçüdə və istifadəsi daha sadədir. Glide GIF və video kadrları dəstəkləyir, yaddaşı daha səmərəli idarə edir və Google tərəfindən tövsiyə olunur. Seçim layihənin əlavə formatlara olan ehtiyacından asılıdır.

Picasso keşini necə təmizləmək olar?

Keşi təmizləmək üçün tək şəkil üçün Picasso.get().invalidate(url) metodundan və ya tam təmizləmə üçün shutdown() metodundan istifadə edin. Disk keşi tətbiqin yenidən quraşdırılması və ya sistem parametrləri vasitəsilə silinir.

Picasso ekran dönməsini necə idarə edir?

Picasso ekran dönməsindən asılı deyil. Yüklənmiş şəkillər keşdə saxlanılır və Activity yenidən yaradıldıqda oradan göstərilir. Sürətləndirmək üçün ViewModel-i Picasso ilə birlikdə yüklənmiş məlumatları saxlamaq üçün istifadə edin.

Picasso Kotlin-də istifadə edilə bilərmi?

Bəli, Picasso Kotlin ilə tam uyğundur. Kotlin tərtibatçıları daha qısa sintaksis üçün extension funksiyalarından və ya şəkil yükləmə zamanı null dəyərləri idarə etmək üçün koptional kitabxanasından istifadə edə bilərlər.

Picasso yaddaşı necə idarə edir?

Picasso yaddaş keşi üçün LruCache istifadə edir, istifadə olunmayan şəkilləri avtomatik təmizləyir. Standart keş ölçüsü tətbiqin mövcud yaddaşının 15%-dir. Yaddaş çatışmazlığı zamanı Picasso onTrimMemory vasitəsilə resursları boşaldır.

Nəticə

  • Picasso — Square-dən minimal API ilə yüngül şəkil yükləmə kitabxanası
  • Keşləmə diskdə və yaddaşda avtomatik ölçü idarəetməsi ilə
  • Transformasiyalar CenterCrop, CenterInside və Transformation interfeysi ilə xüsusi
  • Placeholder və xəta şəkilləri hamar istifadəçi təcrübəsi üçün
  • Avtomatik sorğu ləğvi RecyclerView-də lazımsız yükləmələrin qarşısını alır
  • Debug göstəricisi şəklin mənbəyini vizual olaraq müəyyən etməyə kömək edir
  • Kitabxana ölçüsü cəmi 120 KB — APK ölçüsünə minimal təsir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun