Vorrei condividere la mia esperienza con queste 3 biblioteche: UIL, Picasso e Volley. In precedenza ho usato UIL ma poi sono giunto alla conclusione che non posso davvero consigliarlo e suggerirei di usare invece Volley o Picasso, entrambi sviluppati da team di grande talento. La UIL non è affatto male ma manca della cura dei dettagli delle altre due librerie.
Ho trovato UIL meno piacevole con le prestazioni dell'interfaccia utente; tende a bloccare il thread dell'interfaccia utente più di Volley o Picasso. Ciò può essere in parte dovuto al fatto che UIL non supporta il batch delle risposte alle immagini mentre Picasso e Volley lo fanno per impostazione predefinita.
Inoltre, non mi piaceva il sistema di cache del disco di UIL. Sebbene sia possibile scegliere tra varie implementazioni, devo sottolineare che al momento non c'è modo di limitare la cache del disco UIL sia per dimensione totale che per tempo di scadenza dell'entità. Volley e Picasso lo fanno e usano il tempo di scadenza restituito dal server per impostazione predefinita mentre UIL lo ignora.
Infine, UIL ti consente di impostare una configurazione del caricatore di immagini globale che include la cache del disco selezionata e le implementazioni e le impostazioni della cache di memoria e altri dettagli, ma questa configurazione verrà applicata ovunque nella tua app. Quindi, se hai bisogno di maggiore flessibilità come due cache del disco separate, non puoi fare a meno di UIL. Volley d'altra parte ti consente di avere tutti i caricatori di immagini separati che desideri, ognuno con la propria configurazione. Picasso utilizza un'istanza globale per impostazione predefinita, ma consente anche di creare istanze configurabili separatamente.
Per riassumere: Picasso ha la migliore API ma utilizza la cache del disco HTTP globale condivisa tra tutte le HttpURLConnection
istanze, che in alcuni casi può essere troppo restrittiva. Volley ha le migliori prestazioni e modularità ma è meno facile da usare e richiederà la scrittura di uno o due moduli per farlo funzionare come desideri. Nel complesso, li consiglierei entrambi contro UIL.
Modifica (18 dicembre 2014): Le cose sono cambiate da quando ho scritto questa risposta iniziale e ho ritenuto necessario migliorarla:
Picasso 2.4 è ancora più configurabile rispetto alle versioni precedenti e, se utilizzato con OkHttp (che è altamente raccomandato), è anche in grado di utilizzare una cache del disco separata per ogni istanza, quindi non ci sono davvero restrizioni in ciò che puoi fare. Ancora più importante, ho notato che le prestazioni di Picasso e OkHttp sono migliorate molto e secondo me ora è la soluzione di caricamento immagini più veloce per Android, punto. Tieni presente che nel mio codice utilizzo sempre .fit()
in combinazione con .centerCrop()
o .centerInside()
per ridurre l'utilizzo della memoria ed evitare il ridimensionamento delle bitmap nel thread dell'interfaccia utente. Picasso è attivamente sviluppato e supportato e questo è sicuramente un grande vantaggio.
Il Volley non è cambiato molto ma nel frattempo ho notato due problemi:
- A volte sotto carico pesante, alcune immagini non vengono più caricate a causa di alcuni danneggiamenti della cache del disco.
- Le miniature visualizzate in una NetworkImageView (con il tipo di scala impostato su centerCrop) sono piuttosto sfocate rispetto a ciò che si ottiene con le altre librerie.
Per questi motivi ho deciso di smettere di usare Volley.
UIL è ancora lento (specialmente la cache del disco) e la sua API ha la tendenza a cambiare abbastanza spesso.
Ho anche testato questa nuova libreria chiamata Glide 3 che afferma di essere più ottimizzata di Picasso con un'API simile a Picasso. Secondo la mia esperienza personale è effettivamente più lento di Picasso e Volley durante le richieste di rete sotto carico pesante, anche se utilizzato in combinazione con OkHttp. Peggio ancora, ha causato alcuni arresti anomali con le mie app sotto Lollipop quando si lascia un'attività. Ha ancora 2 vantaggi rispetto ai suoi concorrenti:
- Supporta la decodifica di GIF animate
- Mette le bitmap finali ridotte nella cache del disco, il che significa che la rilettura dalla cache del disco è estremamente veloce.
Conclusione: ora consiglio di utilizzare Picasso + OkHttp perché fornisce la migliore flessibilità, API, prestazioni e stabilità combinate. Se hai bisogno del supporto GIF puoi anche considerare Glide.