美文网首页
利用okhttp拦截器在activity销毁的时候中止网络事件

利用okhttp拦截器在activity销毁的时候中止网络事件

作者: 加油小李 | 来源:发表于2022-11-14 04:13 被阅读0次

    关健做法:
    方法一okhttp处理
    在okhttp的request执行build()方法之前加上tag标记
    判断activity是否已经销毁,如果已经销毁
    就便利Call对象 ,并通过Call对象拿到request的tag标记,如果跟前面定义的一致就
    用Call.cancel()取消网络请求

    方法二Retrofit处理:
    1,定义一个类,类里面创建一个键值对集合ConcurrentHashMap<String, Boolean>来标记页面存活状态并添加下面两个页面创建以及销毁的方法。
    private static ConcurrentHashMap<String, Boolean> actLiveMap = new ConcurrentHashMap<>(); // 标记Activity是否存活

    public static void markPageAlive(String actName) {
    actLiveMap.put(actName, true);
    }

    public static void markPageDestroy(String actName) {
    actLiveMap.put(actName, false);
    }

    2.在Activity的OnCreate和OnDestroy方法你们分别对应上面两个方法进行添加

    3.给请求接口类的请求方法的参数上加上header
    @Header(NetworkCenter.HEADER_ACT_NAME) @Nullable String actName,

    4.继承okhttp拦截器创建一个自定义拦截器,并在通过拦截器的chain拿到request对象
    并通过该对象拿到header,最终拿到activity的存活状态,如果存活就什么也不做,如果不存活就使用chain.call().cancel();来取消请求,最后执行
    Request newRequest = request.newBuilder().removeHeader(HEADER_ACT_NAME).build();
    return chain.proceed(newRequest);
    }
    将Header移出

    5.在okhttp bulid()前将自定义拦截器传入即可.

    相关文章

      网友评论

          本文标题:利用okhttp拦截器在activity销毁的时候中止网络事件

          本文链接:https://www.haomeiwen.com/subject/jxqkxdtx.html