En parallèle des requêtes HTTP avec Rénovation
J'ai une application Android qui est actuellement à l'aide de Volley
de la bibliothèque pour faire des demandes de réseau et de montrer les images téléchargées avec NetworkImageView
.
Je voudrais tester Retrofit
s'capacités et depuis j'ai besoin d'exécuter beaucoup de demandes (milliers) je suis un peu inquiet à propos de l'exécution en parallèle. Volley
poignées de demandes parallèles avec la RequestQueue
que les limites de la concurrente de demandes en cours d'exécution à quatre, tandis que les autres demandes sont en file d'attente en attente d'être exécuté. Dans Retrofit
documentations je n'ai pas trouvé de moyen pour gérer le nombre de demandes simultanées, et je soupçonne que ces détails sont laissés pour le développeur de cette bibliothèque.
Est-ce correct? Si oui, est-il un android orientée vers la mise en œuvre/bibliothèque à disposition? Sinon, quelles sont les meilleures pratiques pour gérer les demandes parallèles?
Vous devez vous connecter pour publier un commentaire.
Rénovation utilise un
Executor
pour les files d'attente des demandes.La valeur par défaut utilise
Executors.newCachedThreadPool
qui permet pour un nombre illimité de fils. Convient à la plupart des cas d'utilisation, car, normalement, vous n'aurait jamais une ou deux demandes qui se passe à la fois.Vous pouvez modifier ce comportement, cependant, en fournissant votre propre lors de la construction de la
RestAdapter
. AppelsetExecutors
et passer dans un exécuteur testamentaire qui utilise un clos le pool de thread (limité à ce que le numéro que vous voulez). Pour le deuxième argument, il suffit de passer une nouvelle instance deMainThreadExecutor
ainsi que les rappels se passer sur le thread principal.ThreadPoolExecutor
à gérer mon fils? Si oui, j'ai été en utilisant ce avant de migrer versVolley
, mais j'ai eu deux problèmes principaux: 1) j'étais en train de perdre certaines demandes, parce que la file d'attente était pleine, Volley a une surabondance de la file d'attente. 2) Certaines demandes ont été retirés de la file d'attente parce qu'ils attendent trop longtemps.java.util.concurrent
à choisir.RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(SomeEndpoint) .setExecutors(Executors.newFixedThreadPool(5), null) .build();
Note le deuxième argument est la fonction de rappel exécuteur - ce qui va mettre le rappel sur le même thread que le client. carré.github.io/renovation/javadoc/renovation/...setExecutors
, il va mettre un certain nombre de demandes à être mis dans la file d'attente (si nécessaire) - il correct? Comment pourrait-on être en mesure de gérer la concurrence d'accès lors de la réception de la réponse de laCallBack
? Ne de rénovation gérer cela?Executors#newCachedThreadPool
?