Używam Retrofit 2-beta2 z OkTHtt 2.7.0.Retrofit 2/OkHttp: Anuluj wszystkie uruchomione żądania
Aby uzyskać OkHttpClient
obiekt z Retrofit Używam metody Retrofit .client() i odwołać wszystko to działa żądań, dzwonię to cancel(Object tag) metoda ale wnioski nadal biec i uzyskać odpowiedź.
Nawet klient Dispatcher
klienta getQueuedCallCount() i getRunningCallCount() zwraca 0 po wywołaniu cancel().
Czy jest coś jeszcze, co muszę zrobić, aby zadziałało? Czy może to być błąd w OkHttp?
Jako obejście problemu dzwonię pod numer shutdownNow()
na komputerze klienta ExecutorService
, ale wolę bardziej przejrzyste rozwiązanie.
Po przejściu przez kod źródłowy rozumiem teraz, dlaczego to nie działa. Ustawiam tag na 'Request' za pomocą przechwytywacza, tworząc nowy obiekt' Request'. 'OkHttpClient.cancel (Object tag)' nie robi nic, ponieważ oryginalny 'Request' (na którym jest wywoływane' cancel() ', ponieważ jest obecny w kolejce żądań' Dispatchera') nadal nie ma zestawu znaczników. Wygląda na to, że Retrofit nie udostępnia żadnej metody ani interfejsu do ustawienia znacznika na oryginalnym obiekcie 'Request'. –