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

2022-11-14  本文已影响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()前将自定义拦截器传入即可.

上一篇下一篇

猜你喜欢

热点阅读