Okhttp页面结束同时终结该页面的请求,防止内存泄漏及报错

来源:互联网 发布:oracle 大数据 编辑:程序博客网 时间:2024/05/16 01:59

首先找到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中
@Overrideprotected void onDestroy() {    super.onDestroy();    //xxx    OkHttpUtils.getInstance().cancelTag(this.getLocalClassName());}

OKHttp与页面生命周期绑定便可以实现了

0 0
原创粉丝点击