Question en deux parties d'un développeur iOS apprenant Android, travaillant sur un projet Android qui fera une variété de demandes de JSON à l'image pour télécharger en streaming de l'audio et de la vidéo:
Sur iOS, j'ai beaucoup utilisé le projet AFNetworking . Existe-t-il une bibliothèque équivalente pour Android?
J'ai lu OkHTTP et Retrofit by Square, ainsi que Volley, mais je n'ai pas encore d'expérience en développement avec eux. J'espère que quelqu'un pourrait fournir des exemples concrets de meilleurs cas d'utilisation pour chacun. D'après ce que j'ai lu, OkHTTP semble être le plus robuste des trois, et pourrait gérer les exigences de ce projet (mentionné ci-dessus).
android
networking
retrofit
android-networking
Alfie Hanssen
la source
la source
Réponses:
Utilisez Retrofit si vous communiquez avec un service Web. Utilisez la bibliothèque de pairs Picasso si vous téléchargez des images. Utilisez OkHTTP si vous devez effectuer des opérations HTTP qui se trouvent en dehors de Retrofit / Picasso.
Volley rivalise à peu près avec Retrofit + Picasso. Du côté positif, c'est une bibliothèque. Du côté négatif, il s'agit d'
unebibliothèque nondocumentée,non prise en charge, «jetez le code sur le mur et faites une présentation I | O dessus».EDIT - Volley est désormais officiellement pris en charge par Google. Veuillez vous référer au Guide du développeur Google
Retrofit utilise OkHTTP automatiquement si disponible. Il y a un Gist de Jake Wharton qui relie Volley à OkHTTP.
Vous n'en utiliserez probablement aucun pour le "téléchargement en continu d'audio et de vidéo", selon la définition conventionnelle du "streaming". Au lieu de cela, le cadre multimédia d'Android traitera ces demandes HTTP pour vous.
Cela étant dit, si vous essayez de faire votre propre streaming HTTP, OkHTTP devrait gérer ce scénario; Je ne me souviens pas à quel point Volley gérerait ce scénario. Ni Retrofit ni Picasso ne sont conçus pour cela.
la source
En regardant la perspective Volley, voici quelques avantages pour votre besoin:
Volley, d'une part, se concentre totalement sur la gestion de petites requêtes HTTP individuelles. Donc, si la gestion de vos requêtes HTTP a des bizarreries, Volley a probablement un crochet pour vous. Si, d'autre part, vous avez une bizarrerie dans la gestion de votre image, le seul vrai crochet que vous avez est ImageCache . "Ce n'est pas rien, mais ce n'est pas beaucoup!". mais il a plus d'autres avantages comme Une fois que vous définissez vos demandes, les utiliser à partir d'un fragment ou d'une activité est indolore contrairement aux AsyncTasks parallèles
Avantages et inconvénients de Volley:
Alors qu'est-ce qui est bien avec Volley?
La partie mise en réseau n'est pas seulement pour les images. Volley est destiné à faire partie intégrante de votre back-end. Pour un nouveau projet basé sur un simple service REST, cela pourrait être une grande victoire.
NetworkImageView est plus agressif à propos du nettoyage des demandes que Picasso, et plus conservateur dans ses modèles d'utilisation de GC. NetworkImageView s'appuie exclusivement sur des références de mémoire solides et nettoie toutes les données de demande dès qu'une nouvelle demande est faite pour une ImageView, ou dès que cette ImageView passe hors écran.
Performance. Ce message n'évaluera pas cette affirmation, mais ils ont clairement pris soin d'être judicieux dans leurs modèles d'utilisation de la mémoire. Volley fait également un effort pour regrouper les rappels au thread principal afin de réduire le changement de contexte.
Volley a apparemment aussi un avenir. Consultez RequestFuture si vous êtes intéressé.
Si vous avez affaire à des images compressées à haute résolution, Volley est la seule solution ici qui fonctionne bien.
Volley peut être utilisé avec Okhttp (la nouvelle version d'Okhttp prend en charge NIO pour de meilleures performances)
Volley joue bien avec le cycle de vie de l'activité.
Problèmes avec Volley:
Étant donné que Volley est nouveau, peu de choses ne sont pas encore prises en charge, mais elles sont corrigées.
Demandes en plusieurs parties (solution: https://github.com/vinaysshenoy/enhanced-volley )
le code d'état 201 est considéré comme une erreur, les codes d'état de 200 à 207 sont maintenant des réponses réussies. (Correction: https://github.com/Vinayrraj/CustomVolley )
Mise à jour: dans la dernière version de Google Volley, le bug des codes d'état 2XX est maintenant corrigé ! Merci à Ficus Kirkpatrick!
c'est moins documenté mais beaucoup de gens soutiennent la volley dans github, la documentation de type java peut être trouvée ici . Sur le site Web des développeurs Android, vous pouvez trouver un guide pour la transmission de données réseau à l'aide de Volley . Et le code source de volley peut être trouvé sur Google Git
Pour résoudre / modifier la politique de redirection du cadre Volley, utilisez Volley avec OkHTTP ( CommonsWare mentionné ci-dessus)
Vous pouvez également lire le chargement de l'image de Comparaison de Volley avec Picasso
Rénovation:
Il est publié par Square , cela offre des API REST très faciles à utiliser (Mise à jour: Voila! Avec support NIO)
Avantages de Retrofit:
Comparé à Volley, le code API REST de Retrofit est bref et fournit une excellente documentation API et a un bon support dans les communautés! Il est très facile de l'ajouter aux projets.
Nous pouvons l'utiliser avec n'importe quelle bibliothèque de sérialisation, avec gestion des erreurs.
Mise à jour: - Il y a beaucoup de très bons changements dans Retrofit 2.0.0-beta2
Inconvénients de Retrofit pour la version 1.6:
La fonctionnalité de gestion des erreurs liée à la mémoire n'est pas bonne (dans les anciennes versions de Retrofit / OkHttp), je ne sais pas si elle a été améliorée avec le support Okio avec Java NIO.
Une assistance minimale au filetage peut entraîner un rappel de l'enfer si nous l'utilisons de manière incorrecte.
(Tous les inconvénients ci-dessus ont été résolus dans la nouvelle version de Retrofit 2.0 beta)
================================================== ======================
Mise à jour:
Android Async vs Volley vs Retrofit benchmarks de performance (millisecondes, une valeur inférieure est meilleure):
(Pour info ci-dessus, les informations sur les repères de mise à niveau s'amélioreront avec la prise en charge de Java NIO car la nouvelle version d'OKhttp dépend de la bibliothèque NIO Okio)
Quand utiliser Volley?!
Nous pouvons utiliser Volley lorsque nous avons besoin de charger des images ainsi que de consommer des API REST !, le système de mise en file d'attente des appels réseau est nécessaire pour de nombreuses demandes n / w en même temps! Volley a également une meilleure gestion des erreurs liées à la mémoire que Retrofit!
OkHttp peut être utilisé avec Volley, Retrofit utilise OkHttp par défaut! Il a un support SPDY , un pool de connexions, une mise en cache disque, une compression transparente! Récemment, il a obtenu un certain support de java NIO avec Okio bibliothèque .
Source, crédit: volley-vs-retrofit par M. Josh Ruesch
Remarque: À propos du streaming, cela dépend du type de streaming que vous souhaitez, comme RTSP / RTCP.
la source
MultipartEntityBuilder
enhttpmime
bibliothèque avec lui.RoboSpice Vs. Volée
Depuis https://groups.google.com/forum/#!topic/robospice/QwVCfY_glOQ
la source
compile 'com.mcxiaoke.volley:library:1.0.+'
AFNetworking pour Android:
La mise en réseau Android rapide est arrivée
La bibliothèque de mise en réseau Android rapide prend en charge tous les types de requêtes HTTP / HTTPS comme GET, POST, DELETE, HEAD, PUT, PATCH
La bibliothèque de réseautage Android rapide prend en charge le téléchargement de tout type de fichier
La bibliothèque de mise en réseau Android rapide prend en charge le téléchargement de tout type de fichier (prend en charge le téléchargement en plusieurs parties)
La bibliothèque de mise en réseau Android rapide prend en charge l'annulation d'une demande
La bibliothèque de mise en réseau Android rapide prend en charge la définition de la priorité pour toute demande (FAIBLE, MOYEN, ÉLEVÉ, IMMÉDIATE)
La bibliothèque de mise en réseau Android rapide prend en charge RxJava
Comme il utilise OkHttp comme couche réseau, il prend en charge:
La bibliothèque de mise en réseau Android rapide prend en charge la prise en charge HTTP / 2 permet à toutes les demandes au même hôte de partager un socket
La bibliothèque de mise en réseau Android rapide utilise le pool de connexions qui réduit la latence des demandes (si HTTP / 2 n'est pas disponible)
GZIP transparent réduit les tailles de téléchargement
La bibliothèque de réseautage Android rapide prend en charge la mise en cache des réponses, ce qui évite complètement le réseau pour les demandes répétées
Merci: la bibliothèque est créée par moi
la source
Async HTTP client loopj vs Volley
Les spécificités de mon projet sont de petites requêtes HTTP REST, toutes les 1-5 minutes.
J'utilise un client HTTP asynchrone (1.4.1) depuis longtemps. Les performances sont meilleures que l'utilisation du vanilla Apache httpClient ou d'une connexion URL HTTP. Quoi qu'il en soit, la nouvelle version de la bibliothèque ne fonctionne pas pour moi: la bibliothèque inter exception coupe la chaîne de rappels.
La lecture de toutes les réponses m'a motivé à essayer quelque chose de nouveau. J'ai choisi la bibliothèque HTTP Volley.
Après l'avoir utilisé pendant un certain temps, même sans tests, je vois clairement que le temps de réponse est tombé à 1,5x, 2x Volley.
Peut-être que Retrofit est meilleur qu'un client HTTP asynchrone? Je dois l'essayer. Mais je suis sûr que Volley n'est pas pour moi.
la source
Juste pour ajouter un peu à la discussion de mon expérience de travail avec Volley:
Volley ne gère en aucun cas les téléchargements en continu ou les téléchargements. Autrement dit, le corps de la demande doit être en mémoire dans son intégralité et vous ne pouvez pas utiliser un
OutputStream
pour écrire le corps de la demande dans le socket sous-jacent, ni utiliser unInputStream
pour lire le corps de la réponse, comme c'est le cas pour BasicHttpURLConnection
. Ainsi, Volley est un mauvais choix pour télécharger ou télécharger des fichiers volumineux. Vos demandes et réponses doivent être petites. C'est l'une des plus grandes limitations de Volley que j'ai personnellement rencontrées. Pour ce que ça vaut, OkHttp a des interfaces pour travailler avec les flux.Le manque de documentation officielle est ennuyeux, même si j'ai pu contourner cela en lisant le code source, ce qui est assez facile à suivre. Ce qui est plus gênant, c'est que, pour autant que je sache, Volley n'a pas de versions officielles et aucun artefact Maven ou Gradle, et donc le gérer comme une dépendance devient plus un casse-tête que, disons, toutes les bibliothèques que Square a publiées . Vous venez de cloner un dépôt, de construire un pot et vous êtes seul. Vous cherchez une correction de bogue? Va chercher et j'espère que c'est là. Vous pourriez aussi avoir d'autres trucs; cela ne sera pas documenté. À mon avis, cela signifie effectivement que Volley est une bibliothèque tierce non prise en charge, même si la base de code est raisonnablement active. Caveat emptor.
En gros, avoir le Content-Type lié au type classe / demande (JsonObjectRequest, ImageRequest, etc.) est un peu gênant et réduit un peu la flexibilité du code appelant, car vous êtes lié à la hiérarchie de types de demande existante de Volley. J'aime la simplicité de simplement définir Content-Type comme un en-tête comme les autres (ne le faites pas avec Volley, au fait; vous vous retrouverez avec deux en-têtes Content-Type!). C'est juste mon opinion personnelle, cependant, et cela peut être contourné.
Cela ne veut pas dire que Volley ne possède pas de fonctionnalités utiles. C'est certainement le cas. Des politiques de relance facilement personnalisables, une mise en cache transparente, une API d'annulation et la prise en charge de la planification des demandes et des connexions simultanées sont d'excellentes fonctionnalités. Sachez simplement qu'il n'est pas destiné à tous les cas d'utilisation HTTP (voir l'élément 1 ci-dessus), et qu'il y a quelques maux de tête impliqués dans la mise en production de Volley dans votre application (élément 2).
la source
J'ai récemment trouvé une bibliothèque appelée ion qui apporte un petit plus à la table.
ion a un support intégré pour le téléchargement d'images intégré à ImageView, JSON (avec l'aide de GSON), des fichiers et un support de threading UI très pratique.
Je l'utilise sur un nouveau projet et jusqu'à présent, les résultats ont été bons. Son utilisation est beaucoup plus simple que Volley ou Retrofit.
la source
Ajout à la réponse acceptée et à ce que LOG_TAG a dit .... pour que Volley analyse vos données dans un thread d'arrière-plan, vous devez sous-classer
Request<YourClassName>
car laonResponse
méthode est appelée sur le thread principal et l'analyse sur le thread principal peut entraîner un décalage de l'interface utilisateur si votre réponse est grand. Lisez ici comment procéder.la source
Retrofit 1.9.0 contre RoboSpice
J'utilise les deux dans mon application.
Robospice fonctionne plus rapidement que Retrofit chaque fois que j'analyse la classe JSON imbriquée. Parce que Spice Manger fera tout pour vous. Dans Retrofit, vous devez créer GsonConverter et le désérialiser.
J'ai créé deux fragments dans la même activité et appelé en même temps avec deux mêmes types d'URL.
la source
Et encore une autre option: https://github.com/apptik/jus
Et de nombreuses autres fonctionnalités pratiques comme les marqueurs, les transformateurs, etc.
la source