网络专题网络请求OKHTTP学习

OKHTTP结合官网示例分析两种自定义拦截器的区别

2017-07-11  本文已影响2927人  未见哥哥

OKHTTP异步和同步请求简单分析
OKHTTP拦截器缓存策略CacheInterceptor的简单分析
OKHTTP拦截器ConnectInterceptor的简单分析
OKHTTP拦截器CallServerInterceptor的简单分析
OKHTTP拦截器BridgeInterceptor的简单分析
OKHTTP拦截器RetryAndFollowUpInterceptor的简单分析
OKHTTP结合官网示例分析两种自定义拦截器的区别

1、LoggingInterceptor示例代码

通过下面的代码可以看出,它就是用于在请求发送前和网络响应后的打印日志信息的拦截器。具体打印的内容很简单,就不解释了,重点是 Application Intercetor 和 NetworkInterceptor 的区别,继续往下看。

class LoggingInterceptor implements Interceptor {
  @Override public Response intercept(Interceptor.Chain chain) throws IOException {
    Request request = chain.request();
    
    //请求前--打印请求信息
    long t1 = System.nanoTime();
    logger.info(String.format("Sending request %s on %s%n%s",
        request.url(), chain.connection(), request.headers()));

    //网络请求
    Response response = chain.proceed(request);

    //网络响应后--打印响应信息
    long t2 = System.nanoTime();
    logger.info(String.format("Received response for %s in %.1fms%n%s",
        response.request().url(), (t2 - t1) / 1e6d, response.headers()));

    return response;
  }
}

2、Application Intercetor和NetworkInterceptor的区别

在官方文档中用 LoggingInterceptor 作为示例,解释了 Application Intercetor 和 NetworkInterceptor 的区别。

OKHTTP官网示例在看两种拦截器的区别之前,还是要点击这个链接去看看,之后再看这个博客的总结会好点。

到这里,默认就是已经看过了官网的示例了,那我们就使用一个图来看看拦截器的调用过程:

拦截器的执行过程.png

从上面的调用关系可以看出除了红色圈出的拦截器之外都是系统提供的拦截器,这整个过程是递归的执行过程,在 CallServerInterceptor 中得到最终的 Response 之后,将 response 按递归逐级进行返回,期间会经过 NetworkInterceptor 最后到达自定义的 Interceptor 。

在官网给出的 NetworkInterceptor 和 Application Interceptor 的区别在上面的图中就可以看出:

3、两种拦截器的区别

下面是官网给出的区别,根据我自己的理解,使用中文标出了自己的解释。

Application interceptors

Network Interceptors

在上面还有几个 TODO 没有解决,希望懂的同学指点一下...

上一篇 下一篇

猜你喜欢

热点阅读