Je recherche une solution open source de chargement/mise en cache des images.
Je cherche à:
Je souhaite pouvoir gérer les chargements d’images asynchrones à partir du disque ainsi que du réseau, mais je ne suis pas sûr que le handle de volley de Google se charge à partir du disque.
Est-ce que Volley permet le chargement des ressources à partir du disque?
Un exemple de ce que je voudrais faire est disponible avec AQuery.
la classe volley 'Request traite toutes les requêtes réseau. Je ne trouve aucune ressource de chargement de classe à partir du disque.
Si vous êtes d'accord avec les logiciels plus récents/moins stables, je viens de publier une bibliothèque open source appelée Glide: https://github.com/bumptech/glide
Il est conçu pour vous permettre de charger efficacement n'importe quelle image dans laquelle vous pouvez obtenir un InputStream. Il inclut des implémentations de base pour le chargement de fichiers http /, mais vous permet également de vous connecter ou d’utiliser une bibliothèque externe (telle que Volley) via des rappels.
Il inclut la mise en cache de la mémoire et du disque, ainsi que le recyclage des images bitmap sur les nouveaux appareils. Tout ce que vous avez à faire est d'implémenter une interface pour obtenir un flux d'entrée pour votre modèle de données (chemin/url/uri, etc.) et le transmettre avec les transformations, les espaces réservés ou les animations souhaités au singleton Glide.
Heureux de parler avec vous ou avec quiconque est curieux, nous l'avons largement utilisé chez Bump pour établir une interface avec une variété de bibliothèques.
J'ai recueilli quelques informations importantes sur http://blog.bignerdranch.com/3177-solving-the-Android-image-loading-problem-volley-vs-picasso/ (La comparaison entre plus vieux ver Picasso 2.0 vs volley)
Picasso est totalement concentré sur le chargement d'images. Par conséquent, si vous avez Des défauts dans votre processus de chargement d’image
En revanche, Volley est totalement concentré sur le traitement de petites requêtes HTTP Individuelles. Donc, si votre gestion de requête HTTP a quelques bizarreries, Volley a probablement un crochet pour vous. Si, par contre, vous avez une bizarrerie de Dans votre traitement des images, le seul véritable crochet que vous avez est ImageCache. Ce n’est pas rien, mais ce n’est pas beaucoup non plus, mais il offre Plus d’avantages, comme Une fois que vous définissez vos demandes, leur utilisation à partir d’un fragment ou d’une activité est indolore. Et contrairement au parallèle AsyncTasks
Picasso ne fait qu'une chose, tandis que Volley tente de résoudre un problème plus général.
Android ne gère pas bien les images haute résolution. J'ai une petite Obsession avec le modèle de capture d'OutOfMemoryError dans les applications Android . Cela semble être une tactique ridicule, mais Volley est le seul moyen De gérer de manière fiable certains scénarios d’image par rapport à la galère avec La mise à l’échelle et l’adaptation de grandes images de Picasso. Picasso ne respecte pas l'attribut
scaleType
de votre ImageViews (Vous n'êtes pas sûr que c'est Corrigé dans la dernière version).Test Ex: j'ai constaté que Volley attrape OutOfMemoryError en chargeant L'image de résolution d'origine à la place de la version miniature, Par rapport à la version de Picasso ne explose pas (il attrape OutOfMemoryError aussi), mais picasso ne parvient pas à charger les images trop volumineuses. Non seulement Volley n’explose pas, mais il affiche toutes Ces grandes images !!!.
Selon Android Hacker Koushik Dutta :
Test de TOUTES les bibliothèques Android Image et http
Je teste et compare plusieurs bibliothèques de chargement d'images et de requêtes http disponibles, depuis que deux d'entre elles ont été publiées la semaine dernière.
S'aligner:
- AndroidAsync + UrlImageViewHelper (koush)
- Volley (Google)
- okhttp + Picasso (carré)
Tous prennent en charge les réponses en cache et en cache conditionnelle, gardez en vie, Etc.
Pensées:
- Picasso possède la plus belle API d'image. Je vais voler leur style API de currying pour mes affaires futures/actuelles. Picasso est aussi Visiblement le plus lent. Surtout sur 3g vs wifi. Probablement en raison de Leur client okhttp personnalisé.
- UrlImageViewHelper + AndroidAsync est le plus rapide. Jouer avec ces deux autres grandes bibliothèques a vraiment mis en évidence le fait que l’API de l’image Est assez datée.
- Volley est lisse; J'apprécie énormément leurs transports dorsaux enfichables et je risque d’y laisser tomber AndroidAsync. La priorité de la demande
et la gestion des annulations est excellente.Mise à jour Ce ne sont pas vraiment des librairies http. Juste des chargeurs d'images. mais il y avait des demandes de comparaisons dans les commentaires ... Android-Universal-Image-Loader est actuellement le plus populaire . Hautement personnalisable.
Une requête; comme jQuery, mais pour Android? Je suppose que c'est bien, si vous êtes Dans ce genre de chose. N'utilisez pas celui-ci si; il chie sur le fil de l'interface utilisateur ou quelque chose. Le chargement de plusieurs images sur mon Nexus 4 dans une liste Donnait l’impression que je revenais sur mon HTC G1. Bégaiement majeur.
Tests avec caches claires:
Cold is fresh app start. Warm est dans les caches clairs avec les connexions http Probablement conservés en vie.
Cold/Warm (en millisecondes, moyenne de 10 analyses, effacement des données à chaque analyse):
- Picasso 12142/11892
- UrlImage 7378/4525
- Volley 8292/7520
- Android-Universal-Image-Loader 14484/11243
- AQuery 11341/9637 (celui-ci semble verrouiller le fil de l'interface utilisateur ... ne l'utilisez pas)
Voici la base de code de test: https://github.com/koush/AndroidNetworkBench
Conclusion: Ces tests ne sont guère concluants. Je viens de tester un accès réseau simultané avec de nombreuses images. Certes, tester une bibliothèque est plus complexe que J'aime la manière dont Volley joue à Nice avec le cycle de vie Activité, par exemple. Aucune des autres bibliothèques ne le fait.
Donc, tout ce qui flotte vraiment sur votre bateau. I(Koush) veux Volley avec l’API de Picasso.
Par défaut, Volley n'inclut pas sa propre implémentation de cache disque. Vous devez prendre un DiskLruCache (ou un cache mémoire/disque hybride si vous préférez) et le faire implémenter pour l'interface Volley ImageCache.
Ce billet de blog explique comment implémenter un cache sur disque avec Volley pour charger des images: http://blogs.captechconsulting.com/blog/raymond-robinson/google-io-2013-volley-image-cache-tutorial .
Il suffit d'utiliser la bibliothèque Picasso
:
Picasso.with(context).load(new File("/images/oprah_bees.gif")).into(imageView2);
Cela vous permettra de charger une file
spécifique à partir de SD
et vous pourrez aussi passer la imageView
où vous pouvez définir cette image.
To Lire la suite dans Bibliothèque Picasso
Volly peut également être utilisé pour charger des fichiers sur le disque.
Utilisation:
networkImageView.setImageUrl(Uri.fromFile(newFile(filename)).toString(),mImageFetcher);