Picasso adalah pustaka untuk memuat gambar di aplikasi Android, dikembangkan oleh perusahaan Square. Pustaka ini menyediakan API sederhana dan ekspresif untuk memuat, menyimpan cache, dan menampilkan grafis dari jaringan. Menurut statistik GitHub Picasso, pustaka ini telah diunduh lebih dari 100.000 kali. Picasso secara otomatis mengelola memori dan menyimpan gambar dalam cache di beberapa tingkat.
Poin Utama
Picasso adalah pustaka untuk memuat gambar secara asinkron di Android, dibuat oleh perusahaan Square. Nama ini diambil dari seniman Pablo Picasso, mencerminkan filosofi pustaka: mengubah tugas kompleks menjadi API yang sederhana dan elegan. Ini adalah pustaka paling populer untuk memuat gambar di komunitas Android.
Arsitektur Picasso minimalis: pustaka menggunakan kumpulan thread untuk memuat, LruCache untuk cache di memori, dan DiskLruCache untuk cache disk. Tidak seperti Glide, Picasso tidak memerlukan konfigurasi AppGlideModule dan siap digunakan segera setelah menambahkan dependensi. Ini menjadikannya pilihan ideal untuk prototipe dan proyek kecil.
Picasso 2.8 — versi stabil terakhir, kompatibel dengan Android API 21+ dan Java 8+. Pustaka tidak memerlukan konfigurasi plugin Gradle atau anotasi, yang menyederhanakan migrasi antar versi dan mengurangi risiko kesalahan saat pembaruan. Meskipun memiliki sejarah panjang, Picasso tetap diminati di ribuan proyek di seluruh dunia.
Tugas utama Picasso adalah memuat gambar dari URL, mendekodenya, mengubah ukuran jika diperlukan, dan menampilkannya di ImageView. Pustaka secara otomatis mengelola thread latar belakang, cache, dan penggunaan kembali ImageView dalam daftar.
Sejak dirilis pada tahun 2013, Picasso telah menjadi standar untuk memuat gambar di komunitas Android. Pustaka ini digunakan dalam ribuan aplikasi berkat ambang masuk yang minimal — untuk penggunaan pertama cukup satu baris kode.
Prioritas di Picasso memungkinkan mengatur urutan pemuatan gambar. Secara default, semua permintaan memiliki prioritas normal, tetapi untuk gambar kritis dapat diatur prioritas tinggi melalui metode priority. Jika ImageView digunakan kembali (misalnya, di RecyclerView), Picasso secara otomatis membatalkan permintaan sebelumnya dan memulai yang baru, mencegah kedipan gambar saat scrolling.
Picasso menawarkan serangkaian fitur yang mencakup skenario dasar bekerja dengan gambar di aplikasi seluler tanpa kerumitan yang tidak perlu.
Cache Picasso terdiri dari dua tingkat: memori RAM untuk akses cepat dan disk untuk penyimpanan permanen. Saat meminta gambar, pustaka pertama memeriksa cache di memori, kemudian disk, dan baru setelah itu melakukan permintaan jaringan. Ini secara signifikan mempercepat tampilan gambar yang dimuat berulang kali.
Transformasi memungkinkan mengubah ukuran, memotong, atau memutar gambar tanpa mendekode ulang aslinya setiap kali. Picasso menyediakan transformasi bawaan CenterCrop dan CenterInside, serta memungkinkan pembuatan transformasi kustom melalui antarmuka Transformation. Gambar yang ditransformasi disimpan dalam cache secara terpisah.
Placeholder ditampilkan selama pemuatan gambar dari jaringan, memberikan umpan balik visual kepada pengguna. Gambar error ditampilkan saat pemuatan gagal. Picasso juga mendukung gambar yang ditampilkan hingga versi baru dimuat, yang berguna untuk avatar yang dapat diperbarui.
Picasso mendukung pemuatan gambar dari URL, sumber daya, file, penyedia konten, dan URI. Metode load() kelebihan muatan untuk semua jenis ini, dan pustaka secara otomatis menentukan sumbernya. Untuk sumber daya dan file, Picasso tidak melakukan permintaan jaringan, melainkan memuat data secara langsung, yang mempercepat tampilan grafis bawaan.
Picasso menggunakan arsitektur berbasis RequestCreator dan Dispatcher. Setiap permintaan dibuat melalui Picasso.get().load() dan dijalankan dalam kumpulan thread. Dispatcher mengelola antrian permintaan, prioritas, dan pembatalan permintaan saat ImageView digunakan kembali.
Saat memanggil into(view), Picasso membuat objek Action yang berisi URL, transformasi, target, dan callback. Action ditempatkan dalam antrian Dispatcher. Mesin memuat gambar melalui Downloader (bawaan OkHttp), mendekode Bitmap, menerapkan transformasi, dan mengembalikan hasil ke thread UI. Semua gambar secara otomatis disesuaikan dengan ukuran ImageView.
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
Instalasi Picasso dilakukan melalui Gradle. Pustaka didistribusikan melalui Maven Central dan tidak memerlukan konfigurasi rumit. Versi minimum Android API adalah 21.
Di file build.gradle tingkat modul, tambahkan implementation 'com.squareup.picasso:picasso:2.8'. Setelah sinkronisasi Gradle, Picasso siap digunakan. Untuk bekerja dengan jaringan, Picasso secara otomatis menggunakan OkHttp jika ada di proyek, atau HttpURLConnection bawaan.
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// Kafka untuk memuat dari OkHttp (opsional)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
Indikator debug Picasso menampilkan segitiga berwarna di sudut setiap gambar: merah untuk pemuatan jaringan, biru untuk cache disk, hijau untuk cache memori. Diaktifkan dengan memanggil setIndicatorsEnabled(true) pada instance Picasso. Cache default adalah 15% dari memori yang tersedia perangkat.
Untuk mengonfigurasi instance kustom Picasso, gunakan Picasso.Builder. Ini memungkinkan mengatur Executor untuk thread latar belakang, Downloader untuk permintaan jaringan, MemoryCache dan DiskCache. Instance kustom sangat berguna dalam pengujian, di mana Downloader dapat diganti dengan stub yang mengembalikan gambar tanpa permintaan jaringan.
Contoh di bawah menunjukkan skenario tipikal bekerja dengan Picasso: memuat gambar sederhana, menggunakan transformasi, dan memuat di RecyclerView.
Pemuatan dasar ke ImageView dilakukan dengan satu panggilan. Picasso secara otomatis menyesuaikan gambar dengan dimensi view dengan mempertimbangkan scaleType. Placeholder ditampilkan hingga pemuatan selesai, dan error — saat terjadi kesalahan koneksi.
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
Transformasi BlurTransformation mengaburkan gambar dengan radius tertentu. Transformasi kustom mengimplementasikan antarmuka Transformation dengan metode transform. Cache menyimpan hasil transformasi di bawah kunci unik agar tidak menerapkannya lagi.
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// penerapan blur
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
Di RecyclerView, Picasso secara otomatis membatalkan permintaan untuk ImageView yang telah keluar layar dan menggunakan kembali gambar yang sudah dimuat. Ini mencegah kebocoran memori dan memastikan scrolling yang lancar.
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
Perbandingan Picasso dan Glide adalah pertanyaan umum saat memilih pustaka pemuatan gambar untuk Android. Kedua pustaka menyelesaikan tugas yang sama, tetapi memiliki prioritas dan karakteristik penggunaan yang berbeda.
Picasso lebih cocok untuk proyek di mana kesederhanaan dan ukuran APK minimal penting. Glide dipilih ketika dukungan GIF, bingkai video, dan optimalisasi memori maksimal diperlukan. Glide secara otomatis menskalakan gambar ke ukuran tepat ImageView, yang mengurangi konsumsi memori hingga 50% dibandingkan Picasso dalam beberapa skenario.
Menurut tes kinerja, Glide menunjukkan hasil yang lebih baik saat bekerja dengan RecyclerView berkat mekanisme pramuat dan pembatalan otomatis permintaan saat scrolling cepat. Picasso menggunakan strategi yang lebih sederhana, yang membuatnya dapat diprediksi tetapi kurang efisien pada volume data besar.
Picasso berfokus pada kesederhanaan API dan ukuran minimal. Glide menawarkan fungsionalitas yang lebih luas: dukungan GIF, gambar animasi, bingkai video, dan integrasi dengan siklus hidup. Glide juga mengelola memori lebih efisien berkat penskalaan otomatis ke ukuran ImageView.
| Kriteria | Picasso | Glide |
|---|---|---|
| Ukuran Pustaka | ~120 KB | ~500 KB |
| Dukungan GIF | Tidak | Ya |
| Bingkai Video | Tidak | Ya |
| Pengembang | Square | Google (Bumptech) |
| API | Rantai Fluent | RequestBuilder |
Menurut Android Developer Relations, Glide direkomendasikan oleh Google sebagai pustaka pilihan untuk memuat gambar di proyek baru. Picasso tetap menjadi pilihan tepat untuk proyek sederhana di mana GIF dan bingkai video tidak diperlukan.
Pertanyaan yang Sering Diajukan
Picasso lebih kecil ukurannya dan lebih sederhana digunakan. Glide mendukung GIF dan bingkai video, mengelola memori lebih efisien, dan direkomendasikan oleh Google. Pilihan tergantung pada kebutuhan proyek akan format tambahan.
Untuk membersihkan cache Picasso, gunakan metode Picasso.get().invalidate(url) untuk satu gambar atau shutdown() untuk pembersihan penuh. Cache disk dihapus saat instalasi ulang aplikasi atau melalui pengaturan sistem.
Picasso tidak bergantung pada rotasi layar. Gambar yang dimuat disimpan dalam cache dan ditampilkan darinya saat Activity dibuat ulang. Untuk mempercepat, gunakan ViewModel bersama Picasso untuk menyimpan data yang dimuat.
Ya, Picasso sepenuhnya kompatibel dengan Kotlin. Pengembang Kotlin dapat menggunakan fungsi ekstensi untuk sintaks yang lebih ringkas atau menerapkan pustaka koptional untuk menangani nilai null saat memuat gambar.
Picasso menggunakan LruCache untuk cache di memori, secara otomatis membersihkan gambar yang tidak digunakan. Ukuran cache default adalah 15% dari memori yang tersedia aplikasi. Saat memori tidak mencukupi, Picasso membebaskan sumber daya melalui onTrimMemory.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga