Picasso: nedir, görsel yükleme ve Android uygulamalarında çalışma

Yazar: IT Sectr Yayınlanma: 2026-05-05 Okuma süresi: 8 dk

Picasso, Square şirketi tarafından geliştirilen, Android uygulamalarında görselleri yüklemek için bir kütüphanedir. Kütüphane, ağdan grafikleri yüklemek, önbelleğe almak ve görüntülemek için basit ve anlamlı bir API sağlar. Picasso'nun GitHub istatistiklerine göre, kütüphane 100.000'den fazla kez indirilmiştir. Picasso otomatik olarak belleği yönetir ve görselleri birden çok düzeyde önbelleğe alır.

Önemli Noktalar

  • Picasso — Square'in Android için basit API'li görsel yükleme kütüphanesi
  • Önbellek diskte ve bellekte tekrarlanan görsellerin yükleme süresini azaltır
  • Dönüşümler Crop, Resize ve Rotate anında görsellere uygulanır
  • Placeholder ve hata görselleri yükleme sırasında ve hata durumunda görüntülenir
  • Yükleme öncelikleri görsel görüntüleme sırasını yönetmeye olanak tanır

Picasso Nedir?

Picasso, Square tarafından oluşturulan Android'de eşzamansız görsel yükleme kütüphanesidir. Adını sanatçı Pablo Picasso'dan alır ve kütüphanenin felsefesini yansıtır: karmaşık bir görevi basit ve zarif bir API'ye dönüştürmek. Android topluluğunda görsel yükleme için en popüler kütüphanedir.

Picasso'nun mimarisi minimalisttir: kütüphane yükleme için bir iş parçacığı havuzu, bellek önbelleği için LruCache ve disk önbelleği için DiskLruCache kullanır. Glide'dan farklı olarak Picasso, AppGlideModule yapılandırması gerektirmez ve bağımlılığı ekledikten hemen sonra kullanıma hazırdır. Bu, onu prototipler ve küçük projeler için ideal bir seçim haline getirir.

Picasso 2.8, Android API 21+ ve Java 8+ ile uyumlu en son kararlı sürümdür. Kütüphane, yapılandırma için Gradle eklentileri veya ek açıklamalar gerektirmez, bu da sürümler arası geçişi basitleştirir ve güncellemeler sırasında hata olasılığını azaltır. Uzun geçmişine rağmen Picasso, dünya çapında binlerce projede talep görmeye devam etmektedir.

Picasso'nun ana görevi, URL ile bir görseli yüklemek, kodunu çözmek, gerekirse boyutlandırmak ve bir ImageView'da görüntülemektir. Kütüphane otomatik olarak arka plan iş parçacıklarını, önbelleği ve listelerde ImageView yeniden kullanımını yönetir.

2013'te piyasaya sürülmesinden bu yana Picasso, Android topluluğunda görsel yükleme standardı haline gelmiştir. Kütüphane, minimum giriş eşiği sayesinde (ilk kullanım için yalnızca bir satır kod) binlerce uygulamada kullanılmaktadır.

Öncelikler ve İstek İptali

Picasso'daki öncelikler, görsellerin yükleme sırasını yönetmeye olanak tanır. Varsayılan olarak tüm istekler normal önceliğe sahiptir, ancak kritik görseller için priority yöntemiyle yüksek öncelik ayarlanabilir. Bir ImageView yeniden kullanıldığında (örneğin RecyclerView'da), Picasso otomatik olarak önceki isteği iptal eder ve yenisini başlatır, kaydırma sırasında görsel titreşmesini önler.

Picasso'nun Temel Özellikleri

Picasso, gereksiz karmaşıklık olmadan mobil uygulamalarda görsellerle çalışmanın ana senaryolarını kapsayan bir dizi özellik sunar.

Çok Düzeyli Önbellekleme

Picasso'nun önbelleği iki düzeyden oluşur: hızlı erişim için RAM ve kalıcı depolama için disk. Bir görsel talep edildiğinde, kütüphane önce bellek önbelleğini, ardından diski kontrol eder ve ancak ondan sonra ağ isteği yapar. Bu, tekrar tekrar yüklenen görsellerin görüntülenmesini önemli ölçüde hızlandırır.

Görsel Dönüşümleri

Dönüşümler, her seferinde orijinali kodu çözmeden bir görseli yeniden boyutlandırma, kırpma veya döndürme olanağı sağlar. Picasso, yerleşik CenterCrop ve CenterInside dönüşümlerini sunar ve Transformation arayüzü aracılığıyla özel dönüşümler oluşturmaya da izin verir. Dönüştürülmüş görseller ayrı olarak önbelleğe alınır.

Placeholder ve Hata Görselleri

Placeholder, görsel ağdan yüklenirken görüntülenir ve kullanıcıya görsel geri bildirim sağlar. Yükleme başarısız olduğunda bir hata görseli gösterilir. Picasso ayrıca yeni bir sürüm yüklenene kadar görüntülenen bir görseli de destekler; bu, güncellenebilir avatarlar için kullanışlıdır.

Farklı Kaynaklardan Yükleme

Picasso, URL'lerden, kaynaklardan, dosyalardan, içerik sağlayıcılarından ve URI'lerden görsel yüklemeyi destekler. load() yöntemi tüm bu türler için aşırı yüklenmiştir ve kütüphane kaynağı otomatik olarak belirler. Kaynaklar ve dosyalar için Picasso ağ isteği yapmaz, doğrudan veriyi yükler; bu, yerleşik grafiklerin görüntülenmesini hızlandırır.

Picasso Nasıl Çalışır?

Picasso, RequestCreator ve Dispatcher tabanlı bir mimari kullanır. Her istek Picasso.get().load() ile oluşturulur ve bir iş parçacığı havuzunda yürütülür. Dispatcher, istek kuyruğunu, öncelikleri ve ImageView yeniden kullanıldığında iptali yönetir.

İstek Mimarisi

into(view) çağrıldığında Picasso, URL, dönüşümler, hedef ve geri arama içeren bir Action nesnesi oluşturur. Action, Dispatcher kuyruğuna yerleştirilir. Motor, görseli Downloader (varsayılan olarak OkHttp) aracılığıyla yükler, Bitmap'in kodunu çözer, dönüşümleri uygular ve sonucu UI iş parçacığına teslim eder. Tüm görseller otomatik olarak ImageView boyutuna sığ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 Kurulumu ve Yapılandırması

Picasso kurulumu Gradle aracılığıyla yapılır. Kütüphane Maven Central üzerinden dağıtılır ve karmaşık yapılandırma gerektirmez. Minimum Android API sürümü 21'dir.

Bağımlılığı Ekleme

Modül düzeyindeki build.gradle dosyasına implementation ‘com.squareup.picasso:picasso:2.8’ ekleyin. Gradle senkronizasyonundan sonra Picasso kullanıma hazırdır. Ağ işlemleri için Picasso, projede varsa otomatik olarak OkHttp'yi, yoksa yerleşik HttpURLConnection'ı kullanır.

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

// OkHttp'den yüklemek için Kafka (isteğe bağlı)
implementation "com.squareup.okhttp3:okhttp:4.12.0"

Hata Ayıklama Göstergesi ve Önbellek

Picasso'nun hata ayıklama göstergesi, her görselin köşesinde renkli bir üçgen gösterir: ağ yükleme için kırmızı, disk önbelleği için mavi, bellek önbelleği için yeşil. Picasso örneğinde setIndicatorsEnabled(true) çağrılarak etkinleştirilir. Varsayılan önbellek boyutu, cihazın kullanılabilir belleğinin %15'idir.

Özel bir Picasso örneği yapılandırmak için Picasso.Builder'ı kullanın. Arka plan iş parçacıkları için Executor, ağ istekleri için Downloader, MemoryCache ve DiskCache ayarlamanıza olanak tanır. Özel bir örnek, özellikle Downloader'ın ağ isteği olmadan görsel döndüren bir saplama ile değiştirilebildiği testlerde kullanışlıdır.

Picasso Kullanım Örnekleri

Aşağıdaki örnekler, Picasso ile çalışmanın tipik senaryolarını göstermektedir: basit bir görsel yükleme, dönüşümleri kullanma ve RecyclerView'da yükleme.

ImageView'a Görsel Yükleme

ImageView'a temel yükleme tek bir çağrıyla yapılır. Picasso, scaleType'ı dikkate alarak görseli otomatik olarak görünümün boyutlarına sığdırır. Yükleme tamamlanana kadar bir placeholder gösterilir ve bağlantı hatası durumunda bir hata görseli görüntülenir.

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

Özel Dönüşüm Uygulama

BlurTransformation, görseli belirtilen bir yarıçapla bulanıklaştırır. Özel dönüşümler, transform yöntemiyle Transformation arayüzünü uygular. Önbellek, dönüşüm sonucunu benzersiz bir anahtar altında saklayarak tekrar uygulanmasını önler.

java
public class BlurTransformation implements Transformation {
    @Override
    public Bitmap transform(Bitmap source) {
        Bitmap blurred = Bitmap.createBitmap(source);
        RenderScript rs = RenderScript.create(context);
        // bulanıklaştırma uygulama
        source.recycle();
        return blurred;
    }

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

RecyclerView'da Görsel Yükleme

RecyclerView'da Picasso, ekran dışına kaydırılan ImageView'lar için istekleri otomatik olarak iptal eder ve zaten yüklenmiş görselleri yeniden kullanır. Bu, bellek sızıntılarını önler ve yumuşak kaydırma sağlar.

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: Kütüphane Karşılaştırması

Android için görsel yükleme kütüphanesi seçerken Picasso ve Glide karşılaştırması sık sorulan bir sorudur. Her iki kütüphane de aynı görevi çözer ancak farklı önceliklere ve kullanım özelliklerine sahiptir.

Picasso, basitlik ve minimum APK boyutunun önemli olduğu projeler için daha uygundur. Glide, GIF desteği, video kareleri ve maksimum bellek optimizasyonu gerektiğinde seçilir. Glide, görseli otomatik olarak tam ImageView boyutuna ölçeklendirir ve bazı senaryolarda Picasso'ya kıyasla bellek tüketimini %50'ye kadar azaltır.

Performans testlerinde Glide, ön yükleme mekanizması ve hızlı kaydırma sırasında otomatik istek iptali sayesinde RecyclerView ile çalışırken daha iyi sonuçlar gösterir. Picasso daha basit bir strateji kullanır, bu da onu öngörülebilir ancak büyük veri hacimlerinde daha az verimli kılar.

Picasso, API basitliğine ve minimum boyuta odaklanır. Glide daha geniş işlevsellik sunar: GIF'ler, canlandırılmış görseller, video kareleri ve yaşam döngüsü entegrasyonu desteği. Glide ayrıca ImageView boyutuna otomatik ölçeklendirme sayesinde belleği daha verimli yönetir.

KriterPicassoGlide
Kütüphane Boyutu~120 KB~500 KB
GIF DesteğiHayırEvet
Video KareleriHayırEvet
GeliştiriciSquareGoogle (Bumptech)
APIFluent zincirRequestBuilder

Android Developer Relations'a göre Google, yeni projelerde görsel yükleme için Glide'ı tercih edilen kütüphane olarak önermektedir. Picasso, GIF'lerin ve video karelerinin gerekli olmadığı basit projeler için mükemmel bir seçim olmaya devam etmektedir.

Sıkça Sorulan Sorular

Picasso, Glide'dan nasıl farklıdır?

Picasso boyut olarak daha küçük ve kullanımı daha kolaydır. Glide, GIF'leri ve video karelerini destekler, belleği daha verimli yönetir ve Google tarafından önerilir. Seçim, projenin ek formatlara olan ihtiyacına bağlıdır.

Picasso önbelleği nasıl temizlenir?

Picasso önbelleğini temizlemek için tek bir görsel için Picasso.get().invalidate(url) yöntemini veya tam temizlik için shutdown() kullanın. Disk önbelleği, uygulama yeniden yüklendiğinde veya sistem ayarları aracılığıyla silinir.

Picasso ekran dönüşünü nasıl ele alır?

Picasso ekran dönüşüne bağlı değildir. Yüklenen görseller önbellekte saklanır ve Activity yeniden oluşturulduğunda önbellekten görüntülenir. Hızlandırmak için, yüklenen verileri korumak üzere Picasso ile birlikte ViewModel kullanın.

Picasso Kotlin ile kullanılabilir mi?

Evet, Picasso Kotlin ile tamamen uyumludur. Kotlin geliştiricileri daha kısa sözdizimi için genişletme işlevlerini kullanabilir veya görsel yüklerken null değerleri işlemek için koptional kütüphanesini uygulayabilir.

Picasso belleği nasıl yönetir?

Picasso, bellek önbelleği için LruCache kullanır ve kullanılmayan görselleri otomatik olarak temizler. Varsayılan önbellek boyutu, uygulamanın kullanılabilir belleğinin %15'idir. Bellek düşük olduğunda Picasso, onTrimMemory aracılığıyla kaynakları serbest bırakır.

Özet

  • Picasso — Square'in minimum API'li hafif görsel yükleme kütüphanesi
  • Önbellek diskte ve bellekte otomatik boyut yönetimi ile
  • Dönüşümler CenterCrop, CenterInside ve Transformation arayüzü ile özel
  • Placeholder ve hata görselleri sorunsuz kullanıcı deneyimi için
  • Otomatik istek iptali RecyclerView'da gereksiz yüklemeleri önler
  • Hata ayıklama göstergesi görsel kaynağını görsel olarak belirlemeye yardımcı olur
  • Kütüphane boyutu yalnızca 120 KB — APK boyutunda minimum etki

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun