En utilisant la Place de la Rénovation Client, est-il possible d'annuler une demande d'avancement? Si oui, comment?
Je suis en utilisant la Place de la Rénovation Client et de courte durée json demandes d'une Application Android. Est-il possible d'annuler une demande? Si oui, comment?
- une mise à jour sur qui? Je vais avoir le même problème
- Malheureusement non, même si je n'ai que le fichier ce question
- ouais j'ai trouvé que, après, on dirait qu'il est dans leurs plans...
Vous devez vous connecter pour publier un commentaire.
Pour annuler async Rénovation demande, vous pouvez l'obtenir par l'arrêt de la ExecutorService qui effectue la demande asynchrone.
Par exemple, j'ai eu ce code pour générer la
RestAdapter
:et avait cette méthode pour avec force l'abandon de la demande:
Vous pouvez également faire usage de
ExecutorCompletionService
et soitpoll(timeout, TimeUnit.MILISECONDS)
outake()
toutes les tâches en cours. Cela permettra d'éviter de pool de threads de ne pas s'arrêter, comme il le ferait avecshutdownNow()
et donc vous pouvez réutiliser votreExecutorService
Espère que ce serait de l'aide à quelqu'un.
Modifier: Comme de OkHttp 2 RC1 changelog de l'exécution d'une
.cancel(Object tag)
est possible. Nous devrions nous attendre à la même fonction, dans les prochains Rénovation:Vous pouvez utiliser réelle
Request
objet de l'annulerokClient.cancel(request);
ou si vous avez fourni tag
Request.Builder
vous devez utiliserokClient.cancel(request.tag());
En cours, exécutés ou les demandes en attente sont mis en file d'attente à l'intérieur de
Dispatcher
,okClient.getDispatcher()
. Vous pouvez appeler annuler méthode sur cet objet trop. Méthode Cancel avisera OkHttpEngine
de tuer la connexion à l'hôte, s'il est déjà établi.Edit 2: Rénovation de 2 a complet de l'annulation de la demande.
shutdownNode
être exécuté? Parce qu'actuellement, j'ai l'exécuter dans le thread d'INTERFACE utilisateur et de la demande/transmission n'est pas annulée à tous.Regarder la suite de la discussion
https://plus.google.com/107765816683139331166/posts/CBUQgzWzQjS
Meilleure stratégie serait de l'annulation de la fonction de rappel de l'exécution
https://stackoverflow.com/a/23271559/1446469
J'ai mis en place annulable rappel de classe basée sur la réponse https://stackoverflow.com/a/23271559/5227676
Exemple d'utilisation
C'est pour modernisation 2.0, la méthode appel.annuler() est-il, ce qui annule le vol de l'appeler ainsi. ci-dessous le document de définition.
Annuler cet appel. Une tentative sera faite pour annuler en vol les appels, et si l'appel n'a pas encore été exécutée, elle ne le sera jamais.
Maintenant, il est un moyen facile dans la dernière version de Rénovation V 2.0.0.beta2. Peut mettre en œuvre réessayer trop.
Jetez un oeil ici Comment faire pour annuler en cours demande en rénovation lors de la rénovation.client.UrlConnectionClient est utilisé comme client?
Selon la modification 2.0 beta 3 changelog via le lien https://github.com/square/retrofit/releases/tag/parent-2.0.0-beta3
Cela devrait rendre les choses plus facile.
J'ai peut-être un peu tard, mais j'ai peut-être trouvé une solution.
Je n'ai pas été en mesure d'empêcher une demande d'être exécuté, mais si vous êtes satisfait de la demande en cours d'exécution et ne rien faire, vous pourriez vérifier cette question et la réponse, à la fois, faite par moi.