zoukankan      html  css  js  c++  java
  • 开源框架相关面试问题-okhttp网络框架面试问题详解

    OkHttp使用简介:

    ①、准备OkHttpClient对象:

    一般app中使用网络可以全部用它,可以将它弄为全局变量,这样就可以共用它的缓存和线程池了。

    ②、准备Request对象:

    很显然它是采用Builder模式来构造成,它封装了请求地址、请求方法、请求头、请求体和标志位信息:

    ③、发起请求:分为同步请求和异步请求:
    同步请求:会阻塞UI线程。

    异步请求:也就是不会阻塞UI线程,在子线程中执行的。

     总结:

    • 创建一个OkHttpClient对象。
    • 创建一个Request对象,通过内部类Builder调用生成Request对象。
    • 创建一个Call对象,调用execute【同步请求】 / enqueue【异步请求】。

    OkHttp源码剖析:

    在分析源码之前先来看一张图:

    程序会发一个Request请求给OkHttp的核心层进行处理,而在Okhttp中有一个最重要的概念:拦截器,它会将请求拦截之后再分发response给应用层,大体是这么一个过程。下面先来分析一下同步请求:

    由于前两步比较简单,直接分析第三步:

    先看一下newCall方法是做了啥事:

    实际上是生成了一个RealCall对象,所以最终execute()方法的执行就是在RealCall里面,定位到它:

    下面分析一下它的实现:

    下面具体来看一下:

    这里以CallServerInterceptor拦截器为例进行分析:

    所以说它的底层其实也就是用基础的东东来进行封装滴。

    接下来再来看一下它的异步请求:

    所以进去看一下:

    这个类中有三个重要的集合:



    下面用图来表示一下其整个过程:

  • 相关阅读:
    springBoot jpa 分页
    springBoot jpa 表单关联查询
    springBoot 登录拦截器
    SpringBoot 封装返回类以及session 添加获取
    SpringBoot 数据库操作 增删改查
    IDEA SpringBoot +thymeleaf配置
    IDEA Spring Boot 项目创建
    php判断手机段登录,以及phpcms手机PC双模板调用
    简单爬虫,查博客浏览量
    [51nod1357]密码锁 暨 GDOI2018d1t2
  • 原文地址:https://www.cnblogs.com/webor2006/p/8996541.html
Copyright © 2011-2022 走看看