OkHttpClient无法取消Call by tag

我最近升级到OkHttp3 ,并注意到您无法再直接从客户端取消标记。 这必须由应用程序现在处理。

这里以CHANGELOG为例 :

取消批量呼叫现在是应用程序的责任。 取消按标记调用的API已被删除,并替换为更通用的机制。 调度程序现在通过其runningCalls()和queuedCalls()方法公开所有正在进行的调用。 您可以编写通过标记,主机或其他任何方式选择调用的代码,并对不再需要的调用Call.cancel()。

我用我的简单实用工具方法自行回答这篇文章,以取消正在运行或排队的Call by tag。

使用以下实用程序类取消正在运行或排队的Call by标记:

 public class OkHttpUtils { public static void cancelCallWithTag(OkHttpClient client, String tag) { // A call may transition from queue -> running. Remove queued Calls first. for(Call call : client.dispatcher().queuedCalls()) { if(call.request().tag().equals(tag)) call.cancel(); } for(Call call : client.dispatcher().runningCalls()) { if(call.request().tag().equals(tag)) call.cancel(); } } } 

我创建了一个示例,其中包含一个测试用例: https : //gist.github.com/RyanRamchandar/64c5863838940ec67f03