首先找到OKHttp的任务序列List所在类,Dispatcher
查询可得该类是OKHttpClient类下属性
封装后通过tag取消任务的方法
public void cancelTag(Object tag) { for (Call call : mOkHttpClient.dispatcher().queuedCalls()) { if (tag.equals(call.request().tag())) { call.cancel(); } } for (Call call : mOkHttpClient.dispatcher().runningCalls()) { if (tag.equals(call.request().tag())) { call.cancel(); } } }
找个类存放这个方法用于拿到OkHttpRequestBuilder
private static GetBuilder getBuilder;
public static GetBuilder getBuilder(){ if (getBuilder == null){ getBuilder = OkHttpUtils.get(); } return getBuilder; }
在页面父类,生命周期开始,调用接口前,加入该页面tag,以类名或自定义
getBuilder().tag(this.getLocalClassName());
在父类结束的生命周期onDestory中
@Override protected void onDestroy() { super.onDestroy(); //xxx OkHttpUtils.getInstance().cancelTag(this.getLocalClassName()); }
OKHttp与页面生命周期绑定便可以实现了