Picasso: ce este, încărcarea imaginilor și lucrul în aplicații Android

Autor: IT Sectr Publicat: 2026-05-05 Timp de citire: 8 min

Picasso este o bibliotecă pentru încărcarea imaginilor în aplicații Android, dezvoltată de compania Square. Biblioteca oferă un API simplu și expresiv pentru încărcarea, stocarea în cache și afișarea graficii din rețea. Conform statisticilor GitHub Picasso, biblioteca a fost descărcată de peste 100.000 de ori. Picasso gestionează automat memoria și stochează imaginile în cache la mai multe niveluri.

Principalele puncte

  • Picasso — bibliotecă de încărcare a imaginilor de la Square cu API simplu pentru Android
  • Cache pe disc și în memorie reduce timpul de încărcare a imaginilor repetate
  • Transformări Crop, Resize și Rotate se aplică imaginilor din mers
  • Placeholder și imaginile de eroare sunt afișate în timpul încărcării și la eroare
  • Prioritățile de încărcare permit gestionarea ordinii de afișare a imaginilor

Ce este Picasso?

Picasso este o bibliotecă pentru încărcarea asincronă a imaginilor în Android, creată de compania Square. Numele provine de la artistul Pablo Picasso, reflectând filosofia bibliotecii: transformarea unei sarcini complexe într-un API simplu și elegant. Este cea mai populară bibliotecă pentru încărcarea imaginilor în comunitatea Android.

Arhitectura Picasso este minimalistă: biblioteca utilizează un pool de fire pentru încărcare, LruCache pentru cache în memorie și DiskLruCache pentru cache pe disc. Spre deosebire de Glide, Picasso nu necesită configurarea AppGlideModule și este gata de utilizare imediat după adăugarea dependenței. Acest lucru îl face alegerea ideală pentru prototipuri și proiecte mici.

Picasso 2.8 — ultima versiune stabilă, compatibilă cu Android API 21+ și Java 8+. Biblioteca nu necesită configurarea pluginurilor Gradle sau adnotărilor, ceea ce simplifică migrarea între versiuni și reduce riscul de erori la actualizare. În ciuda istoriei îndelungate, Picasso rămâne solicitat în mii de proiecte din întreaga lume.

Sarcina principală a Picasso este să încarce o imagine de pe URL, să o decodeze, să-i modifice dimensiunea dacă este necesar și să o afișeze în ImageView. Biblioteca gestionează automat firele de fundal, cache-ul și reutilizarea ImageView în liste.

De la lansarea din 2013, Picasso a devenit standardul pentru încărcarea imaginilor în comunitatea Android. Biblioteca este utilizată în mii de aplicații datorită pragului minim de intrare — pentru prima utilizare este suficientă o singură linie de cod.

Priorități și anularea cererilor

Prioritățile în Picasso permit gestionarea ordinii de încărcare a imaginilor. În mod implicit, toate cererile au prioritate normală, dar pentru imaginile critice se poate seta prioritate ridicată prin metoda priority. Dacă ImageView este reutilizat (de exemplu, în RecyclerView), Picasso anulează automat cererea anterioară și pornește una nouă, prevenind pâlpâirea imaginilor la derulare.

Principalele funcționalități Picasso

Picasso oferă un set de funcții care acoperă scenariile de bază de lucru cu imagini în aplicațiile mobile, fără complexitate inutilă.

Cache pe mai multe niveluri

Cache-ul Picasso constă din două niveluri: memoria RAM pentru acces rapid și discul pentru stocare permanentă. La solicitarea unei imagini, biblioteca verifică mai întâi cache-ul din memorie, apoi discul și abia apoi execută cererea de rețea. Acest lucru accelerează semnificativ afișarea imaginilor încărcate repetat.

Transformări ale imaginilor

Transformările permit redimensionarea, decuparea sau rotirea imaginii fără a decoda originalul de fiecare dată. Picasso oferă transformări încorporate CenterCrop și CenterInside, precum și posibilitatea de a crea transformări personalizate prin interfața Transformation. Imaginile transformate sunt stocate în cache separat.

Placeholder și imagini de eroare

Placeholder este afișat în timpul încărcării imaginii din rețea, oferind utilizatorului un feedback vizual. Imaginea de eroare este afișată la eșecul încărcării. Picasso suportă și o imagine care este afișată până când o nouă versiune este încărcată, utilă pentru avatarurile actualizabile.

Încărcarea din diferite surse

Picasso suportă încărcarea imaginilor din URL, resurse, fișiere, furnizori de conținut și URI. Metoda load() este supraîncărcată pentru toate aceste tipuri, iar biblioteca determină automat sursa. Pentru resurse și fișiere, Picasso nu execută o cerere de rețea, ci încarcă datele direct, accelerând afișarea graficii încorporate.

Cum funcționează Picasso?

Picasso utilizează o arhitectură bazată pe RequestCreator și Dispatcher. Fiecare cerere este creată prin Picasso.get().load() și executată într-un pool de fire. Dispatcher gestionează coada de cereri, prioritățile și anularea cererilor la reutilizarea ImageView.

Arhitectura cererii

La apelarea into(view), Picasso creează un obiect Action care conține URL, transformări, target și callback. Action este plasat în coada Dispatcher. Motorul încarcă imaginea prin Downloader (OkHttp implicit), decodează Bitmap, aplică transformările și returnează rezultatul în firul UI. Toate imaginile sunt ajustate automat la dimensiunea ImageView.

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

Instalarea și configurarea Picasso

Instalarea Picasso se face prin Gradle. Biblioteca este distribuită prin Maven Central și nu necesită o configurare complexă. Versiunea minimă Android API este 21.

Adăugarea dependenței

În fișierul build.gradle la nivel de modul, adăugați implementation 'com.squareup.picasso:picasso:2.8'. După sincronizarea Gradle, Picasso este gata de utilizare. Pentru lucrul cu rețeaua, Picasso utilizează automat OkHttp dacă este prezent în proiect sau HttpURLConnection încorporat.

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

// Kafka pentru încărcare din OkHttp (opțional)
implementation "com.squareup.okhttp3:okhttp:4.12.0"

Indicator de depanare și cache

Indicatorul de depanare Picasso afișează un triunghi colorat în colțul fiecărei imagini: roșu pentru încărcare din rețea, albastru pentru cache pe disc, verde pentru cache în memorie. Se activează prin apelarea setIndicatorsEnabled(true) pe instanța Picasso. Cache-ul implicit este de 15% din memoria disponibilă a dispozitivului.

Pentru configurarea unei instanțe personalizate Picasso, utilizați Picasso.Builder. Acesta permite setarea Executor pentru firele de fundal, Downloader pentru cererile de rețea, MemoryCache și DiskCache. O instanță personalizată este utilă în special în teste, unde Downloader poate fi înlocuit cu un stub care returnează o imagine fără cerere de rețea.

Exemple de utilizare Picasso

Exemplele de mai jos demonstrează scenarii tipice de lucru cu Picasso: încărcarea unei imagini simple, utilizarea transformărilor și încărcarea în RecyclerView.

Încărcarea imaginii în ImageView

Încărcarea de bază în ImageView se realizează printr-un singur apel. Picasso ajustează automat imaginea la dimensiunile view-ului ținând cont de scaleType. Placeholder este afișat până la finalizarea încărcării, iar error — la apariția unei erori de conexiune.

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

Aplicarea transformării personalizate

Transformarea BlurTransformation estompează imaginea cu o rază dată. Transformările personalizate implementează interfața Transformation cu metoda transform. Cache-ul salvează rezultatul transformării sub o cheie unică pentru a nu o aplica din nou.

java
public class BlurTransformation implements Transformation {
    @Override
    public Bitmap transform(Bitmap source) {
        Bitmap blurred = Bitmap.createBitmap(source);
        RenderScript rs = RenderScript.create(context);
        // aplicarea estompării
        source.recycle();
        return blurred;
    }

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

Încărcarea imaginilor în RecyclerView

În RecyclerView, Picasso anulează automat cererile pentru ImageView-urile care au ieșit din ecran și reutilizează imaginile deja încărcate. Acest lucru previne scurgerile de memorie și asigură o derulare lină.

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

Picasso sau Glide: compararea bibliotecilor

Compararea Picasso și Glide este o întrebare frecventă la alegerea unei biblioteci de încărcare a imaginilor pentru Android. Ambele biblioteci rezolvă aceeași sarcină, dar au priorități și caracteristici diferite.

Picasso este mai potrivit pentru proiecte unde contează simplitatea și dimensiunea minimă a APK-ului. Glide este ales când este necesar suport pentru GIF, cadre video și optimizarea maximă a memoriei. Glide scalează automat imaginea la dimensiunea exactă a ImageView, reducând consumul de memorie cu până la 50% față de Picasso în unele scenarii.

Conform testelor de performanță, Glide arată rezultate mai bune la lucrul cu RecyclerView datorită mecanismului de preîncărcare și anulării automate a cererilor la derularea rapidă. Picasso utilizează o strategie mai simplă, ceea ce îl face previzibil, dar mai puțin eficient la volume mari de date.

Picasso se concentrează pe simplitatea API-ului și dimensiunea minimă. Glide oferă o funcționalitate mai largă: suport pentru GIF, imagini animate, cadre video și integrare cu ciclul de viață. Glide gestionează și memoria mai eficient datorită scalării automate la dimensiunea ImageView.

CriteriuPicassoGlide
Dimensiunea bibliotecii~120 KB~500 KB
Suport GIFNuDa
Cadre videoNuDa
DezvoltatorSquareGoogle (Bumptech)
APILanț FluentRequestBuilder

Conform Android Developer Relations, Glide este recomandat de Google ca bibliotecă preferată pentru încărcarea imaginilor în proiecte noi. Picasso rămâne o alegere excelentă pentru proiecte simple unde nu sunt necesare GIF și cadre video.

Întrebări frecvente

Cu ce se deosebește Picasso de Glide?

Picasso este mai mic și mai simplu de utilizat. Glide suportă GIF și cadre video, gestionează mai eficient memoria și este recomandat de Google. Alegerea depinde de necesitățile proiectului în formate suplimentare.

Cum se curăță cache-ul Picasso?

Pentru curățarea cache-ului Picasso utilizați metoda Picasso.get().invalidate(url) pentru o singură imagine sau shutdown() pentru curățarea completă. Cache-ul pe disc se șterge la reinstalarea aplicației sau prin setările de sistem.

Cum gestionează Picasso rotirea ecranului?

Picasso nu depinde de rotirea ecranului. Imaginile încărcate sunt păstrate în cache și afișate din acesta la recrearea Activity. Pentru accelerare, utilizați ViewModel împreună cu Picasso pentru păstrarea datelor încărcate.

Pot folosi Picasso în Kotlin?

Da, Picasso este complet compatibil cu Kotlin. Dezvoltatorii Kotlin pot utiliza funcții de extensie pentru o sintaxă mai concisă sau pot aplica biblioteca koptional pentru gestionarea valorilor null la încărcarea imaginilor.

Cum gestionează Picasso memoria?

Picasso utilizează LruCache pentru cache în memorie, ștergând automat imaginile neutilizate. Dimensiunea implicită a cache-ului este de 15% din memoria disponibilă a aplicației. La insuficiența memoriei, Picasso eliberează resurse prin onTrimMemory.

Concluzii

  • Picasso — bibliotecă ușoară de încărcare a imaginilor de la Square cu API minim
  • Cache pe disc și în memorie cu gestionare automată a dimensiunii
  • Transformări CenterCrop, CenterInside și personalizate prin interfața Transformation
  • Placeholder și imagini de eroare pentru o experiență fluidă a utilizatorului
  • Anularea automată a cererilor în RecyclerView previne încărcările inutile
  • Indicatorul de depanare ajută la determinarea vizuală a sursei imaginii
  • Dimensiunea bibliotecii de doar 120 KB — impact minim asupra dimensiunii APK

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și