美文网首页
OkHttp开发之旅2-手写OkHttp网络请求框架

OkHttp开发之旅2-手写OkHttp网络请求框架

作者: Laughing_G | 来源:发表于2019-10-04 15:27 被阅读0次

    一、OkHttp请求基本三步:

            //第一步
            HttpClient client = new HttpClient.Builder().retry(2).build();
            //第二步
            Request request = new Request.Builder()
                    .url("http://www.kuaidi100.com/query?type=yuantong&postid=222222222")
                    .build();
    
            //第三步
            Call call = client.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, Throwable throwable) {
                    if (DEBUG) Log.d(TAG, "MainActivity onFailure: " + "" + throwable);
                }
    
                @Override
                public void onResponse(Call call, Response response) {
                    if (DEBUG) Log.d(TAG, "MainActivity onResponse: " + "" + response.getBody());
                }
            });
    

    二、OkHttp重要类分类:

    1.HttpClient:一个重要成员变量:Dispatcher(调度器),和一个能返回Call的方法:newCall;
    2.Dispathcer:内部定义了一个线程池,和两条队列(正在执行队列和等待执行队列);
    3.Call:内部定义了真正执行网络清理的线程AsyncCall,它的enqueue方法是通过dispatcher的enqueue的方法,将Runnable传递给Dispatcher的线程池管理执行。
    附加说明:
    在Call类的getResponse方法中,先定义了四种拦截器:重试拦截器、请求头拦截器、连接拦截器、通信拦截器,通过责任链模式,执行网络请求:

        /**
         * 这里是重点!!!
         * @return
         */
        private Response getResponse() throws Exception{
            //创建拦截器责任链
            List<Interceptor> interceptors = new ArrayList();
            //重试拦截器
            interceptors.add(new RetryInterceptor());
            //请求头拦截器
            interceptors.add(new HeaderInterceptor());
            //连接拦截器
            interceptors.add(new ConnectionInterceptor());
            //通信拦截器
            interceptors.add(new CallServiceInterceptor());
            InterceptorChain chain = new InterceptorChain(interceptors, 0, this, null);
            return chain.process();
        }
    

    三、责任链模式说明:

    责任链模式说明

    四、OkHttp内部是通过Socket进行网络请求:

    socket示意图

    Demo地址:
    手写OkHttp网络请求

    相关文章

      网友评论

          本文标题:OkHttp开发之旅2-手写OkHttp网络请求框架

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