美文网首页
OkHttp 介绍和使用

OkHttp 介绍和使用

作者: 菜鸟汤先生 | 来源:发表于2016-09-29 15:58 被阅读0次

OkHttp 网络通信层的库 ,Android 4.4后,HttpURLConnection底层实现已被OkHttp替换。可以见得OkHttp的性能已经被Google所认同。

OkHttp的优点:

支持HTTP2.0/SPDY

socket自动选择最好路线,并支持自动重连

拥有自动维护的socket连接池,减少握手次数

拥有队列线程池,轻松写并发

拥有Interceptors轻松处理请求与响应(比如GZIP压缩,LOG打印请求日志等)

实现基于Headers的缓存策略

一 OkHttp的使用

创建OkHttpClient对象:OkHttpClient client = new OkHttpClient();

创建网络请求:Request request = new Request.Builder().url("https://github.com/index.html").build();

得到Call对象:Call call = client.newCall(request);  //创建的是一个RealCall对象

发送同步请求:Response response = call.excute();

发送异步请求 call.enqueue(newCallback() {

@Override

public void onFailure(Request request, IOException e) {

}

@Override

public void onResponse(Response response)throwsIOException {

}

});

二 OkHttp 发送HTTP请求的初步分析

RealCall类#execute方法

client.dispatcher().executed(this);//把请求加入分发队列

Response result = getResponseWithInterceptorChain(false);//获取request对应的response 发起网络请求

RealCall类#enqueue方法

client.dispatcher().enqueue(newAsyncCall(responseCallback,forWebSocket));

请求包装成一个异步请求,AsyncCall继承自Runnable的子接口,实现了一个execute异步方法,Dispatcher会调用该方法,在execute方法内部会调用 getResponseWithInterceptorChain方法获得网络请求的response,随后利用回调方法将结果发送给调用者

Dispatcher类 

中有两个集合分别为:runningAsyncCalls、readyAsyncCalls分别存放正在执行的请求,等待执行的请求

该类中有一个ThreadPoolExecutor线程池执行器,利用该执行器来执行异步请求的execute方法。异步请求发送在非当前工作线程,即创建异步请求的线程,而是从线程池中获取一条线程执行网络请求。同步请求则直接是在当前工作线程中执行。

该类对异步请求的管理是通过maxRequests、maxRequestsPerHost进行控制的,前者控制线程池中同时运行的最大请求数,防止同时运行线程过多,造成OOM。后者限制了同一hostname下的请求数,防止一个应用占用的网络资源过多,优化用户体验。

相关文章

  • OkHttp 介绍和使用

    OkHttp 网络通信层的库 ,Android 4.4后,HttpURLConnection底层实现已被OkHtt...

  • OkHttp(一)入门

    简单介绍OkHttp的使用 OkHttp相关类解析 For:能够通过OkHttp发送请求并处理响应 简单介绍OkH...

  • OKHttp全解析系列(二) -- OkHttp 简介

    OKHttp的使用和类关系 本文目的是对OkHttp 框架及其中的常用概念(类)做简单性介绍。 简介 OKHttp...

  • Retrofit使用

    上篇我们介绍了OkHttp的使用,OkHttp虽说是网络请求,但和velley、nohttp等不大相同,它属于底层...

  • OkHttp使用介绍

    准备 在gradle中添加 在manifest中添加访问网络权限 Okhttp网络请求分两种模式 1. 同步请求 ...

  • Okhttp的简单介绍和使用

    Okhttp的简单介绍和使用 前言: 通过本篇,可以了解一下几点: Android中网络请求进化 okhttp是什...

  • Android网络请求框架OkHttp 同步异步源码分析

    本文使用的OkHttp版本 ↓ 关于OkHttp,大家应该都不陌生了,这里就不多介绍,从我们最常见的使用场景开始 ...

  • 「转载」OkHttp使用介绍

    OkHttp使用介绍 版权声明:欢迎转载,但请保留文章原始出处作者:GavinCT 出处:http://www.c...

  • Retrofit、RxJava和OkHttp使用

    本文主要介绍Retrofit、RxJava和OkHttp使用。需要添加依赖: 这里需要注意RxJava的版本问题,...

  • OkHttp源码之缓存文件介绍

    在上篇文章OkHttp源码之CacheInterceptor中,我们介绍了okhttp是如何使用缓存的,但没有涉及...

网友评论

      本文标题:OkHttp 介绍和使用

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