Android OkHttp源码解析

AndroidOKHttp源码解析 基本的使用流程如下 二、使用流程源码分析 这里与同步请求的有些不同那异步请求流程中Dispatcher中做了什么?从上面的执行流程源码我们可以了解到在进行同步请求 时只是调用了Dispatcher的方法,将同步请求放置到同步双端队列中,这里并没有体现"分发"的作用,而在进行异步请求时,调用了Dispatcher的方法,这里接着看源码: 首先会将异步任务存储到等待队列中,其后会调用进行任务的分发,根据执行队列的请求数量最大阈值和请求相同host的数量进行一个条件判断,根据结果决定要不要把任务放置执行队 阅读详情

引言

从OkHttp问世以来,度娘,google上关于OkHttp的讲解说明数不胜数,各种解读思想不尽相同,一千个读者就有一千个哈默雷特。本篇文章从源码出发向你介绍Okhttp的基本使用以及底层实现原理,让你从会写转向会用,学习Android顶尖源码的设计理念和开源扩展性,如果解读有误,还望提出探讨纠正。

工欲善其事,必先利其器

Android API23(6.0)版本以后,Google正式移除Apache-HttpClientOkHttp 作为一个现代,快速,高效的HttpClient,其功能之强大也是显而易见的

  • 1.支持SPDY 可以合并多个请求到同一个主机的请求、连接池、GZIP和HTTP缓存
  • 2.支持HTTP/2协议,通过HTTP/2 可以让客户端中到服务器的所有请求共用同一个Socket连接
  • 3.非HTTP/2 请求时, OkHttp内部会维护一个线程池,通过线程池可以对HTTP/1.x的连接进行复用,减少延迟
  • 4.支持post,get请求,基于http的文件上传和下载
  • 5.默认情况下,OkHttp会自动处理常见的网络问题,像二次连接、SSL的握手问题

当然OkHttp的功能远不止这些,这里只是说明平时经常用到的。既然OkHttp已经作为官方库使用,相比我们在做项目的时候也会用,但对于其底层的实现原理还是一知半解,那我们就从这篇文章开始解释其底层实现原理。开车前先来一波介绍:

Ecplise引用:下载最新的Jar

Android studio引用:implementation 'com.squareup.okhttp3:okhttp:3.11.0' //最新版本号请关注okhttp官网

Maven引用:

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>3.11.0</version> //最新版本号请关注okhttp官网
</dependency>

各位老司机们,马上开车,嘀嘀嘀!

一、基本使用方法

流程如下


// 启动客户端类,主要有两种方法进行创建,new对象和Builder内部类实现实例化
OkHttpClient  client = new OkHttpClient.Builder().connectTimeout(5, TimeUnit.SECONDS).build();

// get请求
// 通过Builder模式创建一个Request对象(即请求报文)
// 这里可以设置请求基本参数:url地址,get请求,POST请求,请求头,cookie参数等
Request request = new Request.Builder()
                .url("http://www.baidu.com")
                .header("User-Agent", "xxx.java")
                .addHeader("token", "xxx")
                .get()
                .build();

// POST请求
// 表单形式上传
RequestBody body = new FormBody.Builder().add("xxx","xxx").build();
// JSON参数形式,File对象上传
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); 
RequestBody body = RequestBody.create(MediaType.parse("File/*"), file);

Request request = new Request.Builder()
                .post(body)
                .url(url)
                .header("User-Agent", "xxx.java")
                .addHeader("token", "xxx")
                .build();


// 创建Call对象(Http请求) ,即连接Request和Response的桥梁
// newCall方法将request封装成Call对象
Call call = client.newCall(request);
try{
// Response即响应报文信息,包含返回状态码,响应头,响应体等
    Response response = call.execute();
// 这里深入一点,Call其实是一个接口,调用Call的execute()发送同步请求其实是调用了Realcall实现类的方法,Realcall从源码可以看出示一个Runable
    System.out.println(response.body().string());
}catch(IOException e){
    e.printStackTrace();
}

看完代码你可能觉得OkHttp基本流程很繁琐,但是去掉一些扩展参数,你会发现OkHttp的使用其实很简单,无非就是
1.创建一个OkHttpClient并实例化,可设置相关参数连接时长connectTimeout等
2.创建一个Request对象并实例化,可设置网络地址url,请求方式get,post,携带参数等;
3.创建一个Call对象,通过okhttpClient的newCall()方法将Request封装成Call对象
4.创建一个Response响应,用于接收服务器返回的相关信息;
即OkHttpClient客户端通过newCall()方法接受你的Request请求并生成Response响应

Android-Okhttp3源码解析 网络库的选择 理论上来说几乎所有的网络库都是基于Socket实现的,在Socket的基础上可以实现各种应用层的通信协议,比http、ftp等。Java实现的网络库理论上来说都可以在Android端上使用,但由于Android这种嵌入式系统的特性,对网络请求库的要求可能会更严格。 HttpUrlConnection和HttpClient在API23之后已经从系统源码中移除... 阅读详情

相关推荐

AndroidOkHttp网络架构源码深入分析(揭开神秘的面纱)

url(url).build();// (3)创建 Call 对象。// (4)发送请求并获取服务器返回的数据@Override@Override// (5)取出相应的数据});二、源码分析简易图。

2401_84004012的博客 1046

Android 网络编程之OkHttp源码解析

前言:OkHttp框架是Android的网络请求框架,无数的项目都在使用着这个框架,重要性不言而喻; 本文会将OKHTTP源码进行拆解,每个部分来单独学习,由简入深,循序渐进,篇幅较长,建议收藏,慢慢观看,如果觉得内容不错的话,点赞关注来一波,感谢! 源码基于okhttp3 java版本:3.14.9 OkHttp3的简单使用: public void request() { String url = "http://wwww.baidu.com"; OkH.

十年磨一剑 700

无人驾驶-2024-09-智能驾驶与机器视觉09:视觉与多传感器融合

从本章开始,我们将详细介绍视觉与多传感器融合技术。自动驾驶中常用的传感器都有其优势和局限性,单一传感器无法应对复杂的驾驶场景。多传感器融合技术旨在综合利用不同的传感器优势,提升感知的精度和鲁棒性。本章首先介绍多传感器融合的相关概念,之后详细介绍典型的融合方法。

u013250861的博客 569

Android源码-一文带你搞懂OkHttp,【金九银十

);OkHttp核心执行流程是怎样?

m0_60707538的博客 1170

Android-详解网络请求框架-OkHttp源码

前言 1.OkHttp的优点 网络方面 (1)它支持http2.0,在网络请求响应方面使用了多路复用; (2)内置连接池,减少连接开销,复用连接; (3)内有Response缓存,缓存响应,避免重复的请求; (4)对响应体支持gzip压缩,使得传输数据更为轻量; (5)支持SPDY,允许连接同一主机的所有请求分享一个socket; 拓展方面 (1)支持重定向,重试请求,重写编码拦截器; (2)支持头部信息拦截,自带CookieJar方法; (3)支持网络数据传输时的监听; (4)通过需求能自定义拦截器进行处

q1210249579的博客 1842

Android OkHttp完全解析 是时候来了解OkHttp

看到这,你可能会奇怪,竟然还能拿到返回的inputStream,看到这个最起码能意识到一点,这里支持大文件下载,有inputStream我们就可以通过IO的方式写文件。不过也说明一个问题,这个onResponse执行的线程并不是UI线程。的确是的,如果你希望操作控件,还是需要使用handler等,例如:@Override@Override});

2401_89213339的博客 981

Android 网络框架之OkHttp源码解析

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

2301_82241859的博客 1038

2024年最新整理的Android源码解析(内含MMKV ARouter AsyncTask Volley Retrofit Okhttp Binder Handler等等)_安卓源码解析

一、解决问题(BUG)只要是代码,就会有bug,只是说bug的多与少、深与浅罢了二、知其所以然如果我们需要将一个开源项目用到自己的项目中,那么就必须了解这项项目的优缺点,并深知原理,对部分细节(尤其是项目的优势、feature)进行深入研究三、学习看源码也是一种不错的学习方式(虽然不一定不是最佳的方式),尤其对于比较优秀的开源项目,能让人大开眼界四、改造。

2401_87361558的博客 1143

android okhttp 源码解析,Android 网络框架之 OkHttp 源码解析

Android 网络框架之 OkHttp 源码解析前言:OkHttp框架是Android的网络请求框架,无数的项目都在使用着这个框架,重要性不言而喻;本文会将 OkHttp源码进行拆解,每个部分来单独学习,由简入深,循序渐进,篇幅较长,建议收藏,慢慢观看,如果觉得内容不错的话,点赞关注来一波,感谢!源码基于okhttp3 java版本:3.14.9OkHttp3的简单使用:public voi...

weixin_31773159的博客 267

Android OkHttp 框架的使用与源码、原理解析

为了提升应用的健壮性,开发者可以自定义异常处理机制。通过在拦截器中捕获异常,并进行统一的处理和封装,可以将复杂的异常信息转化为更友好、易于理解的错误提示。例如,可以创建一个自定义的异常类NetworkException,在拦截器中捕获各种 OkHttp 异常,并根据异常类型创建NetworkException实例,同时添加详细的错误描述信息。

顾林海 3133

2024年安卓最全Android 网络框架之OkHttp源码解析(1),面试建议对话

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

2401_84556564的博客 1076

Android第三方库源码解析OKHttp,快手安卓面试题

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

2301_82241647的博客 921

Android OkHttp 源码解析 - 拦截器

目录 一、前言 二、拦截器 2.1、RetryAndFollowUpInterceptor 2.2、BridgeInterceptor 2.3、CacheInterceptor 2.4、ConnectInterceptor 2.5、CallServerInterceptor 三、连接机制 3.1 创建连接 3.2 连接池 四 缓存机制 4.1 缓存策略 4.2 缓存...

lerendan的博客 883

视频教程-okhttp应用详解与源码解析-Android

Android网络通信框架--okhttp的应用详解与源码解析 12年工作经...

weixin_28838401的博客 353

Android第三方库源码解析OKHttp

100~199:指示信息,表示请求已接收,继续处理200~299:请求成功,表示请求已被成功接收、理解300~399:重定向,要完成请求必须进行更进一步的操作400~499:客户端错误,请求有语法错误或请求无法实现500~599:服务器端错误,服务器未能实现合法的请求。

2501_90243235的博客 500

Android笔记】OKHttp源码执行流程

Android开发中,常用的第三方网络请求框架有Retrofit,OKHttp,Volley。最近重构项目框架采用的是Kotlin + Retrofit + RxJava,Retrofit的底层实现就是OKHttp实现。本篇文章介绍OKHttp的实现流程以及源码

Ho博客 1006

Android---OkHttp详解

OkHttp 内部是一个门户模式,所有的下发工作都是通过一个门户 Dispatcher 来进行分发。在网络请求阶段通过责任链模式,链式的调用各个拦截器的 intercept 方法。重点介绍了2个比较重要的拦截器:CacheInterceptor 和 CallServerInterceptor。它们分别用来做请求缓存和执行网络请求操作。在理解源码实现的基础上,对 OkHttp 的功能进行了一些扩展,实现了网络请求进度的实现。

qq_44950283的博客 3512

Android OkHttp(一)源码出发探寻执行原理

前言现在主流的网络请求都是使用 Retrofit + OkHttp ,在掌握了一般使用后,就要往深里探究框架源码,这样不光是为了面试装逼,更是提升了对源码理解能力。经过大约一周的时间准备,源码看了个大概,也就大致明白了原理,这里总结一下整理成文,希望对大家能有所帮助。另外,推荐两篇关于OkHttp的文章:OkHttp 官方教材解析-彻底入门OkHttp 使用拆轮子系列:拆OkHttp流程结构首先,...

csdn_aiyang的博客 1605

Android开发神器:OkHttp框架源码解析

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。希望能够帮助到大家提升技术高级UI,自定义ViewUI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

2401_84123005的博客 803

V4L2教程(1):Ubuntu V4L2开发环境搭建与设备探索

欢迎来到V4L2学习指南的第一篇!本文将带你从零开始,在Ubuntu系统上搭建完整的V4L2视频采集开发环境。无论你是想开发视频监控、视频会议还是机器视觉应用,掌握V4L2都是Linux视频开发的必经之路。 **本节学习目标**: - 理解V4L2的基本概念和架构 - 搭建Ubuntu下的V4L2开发环境 - 掌握v4l2-ctl等调试工具的使用 - 学会检测和配置USB摄像头设备

琅嬛福地 368

UE文本编辑器_免安装

直接解压就可以用。

上一篇: Android App优化之提升你的App启动速度
下一篇: Android 基于MediaCodec开发抖音短视频录制(壹)
疯狂的程序员丶
博客等级 码龄11年 106粉丝 91原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值