1.网络分层:网络分层从上到下分别是应用层、传输层、网络层、数据链路层和物理层。

①.物理层:该层负责比特流在节点间的传输,即物理传输,通俗的说就是把计算机连接起来的物理手段

②.数据链路层:该层控制网络层和物理层之间的通信,其主要功能是如何在不可靠的物理线路上进行可靠地传递。

③.网络层:该层决定如何将数据从发送方路由到接收方。

④.传输层:该层为两台主机上的应用程序提供端到端的通信。

⑤.应用层:应用程序收到传输的数据后,接下来就要进行解读。

 

2.tcp的三次握手和四次挥手

如果有大量的连接,每次在连接关闭都要经历三次握手和四次挥手,这显然造成性能低下。因此http有一个叫做keeplive_connection的机制,它可以在数据传输后仍保持连接。

 

3.HTTP协议原理

①.特点:

支持c/s(客户/服务器)模式;

简单快速:客户端请求服务器只需要传送请求方法和路径;

灵活:HTTP允许传输任意类型,正在传输的类型由Content_Type标记;

无连接:每次连接只处理一个请求;

无状态:HTTP协议是无状态协议,无状态是指对事务处理没有记忆功能。

 

②.HTTP请求报文:由请求行、请求报头、空行、请求数据组成

请求行:请求方法、URL字段和HTTP协议版本组成。

请求报头:通知服务端关于客户端的请求信息。

请求数据:POST方法中使用,用于填写表单参数。

 

③.HTTP响应报文:状态行、响应报头、空行、响应正文

状态行:HTTP协议版本信息,状态码,状态码的文本描述

响应报头:用于服务端传递自身的响应

响应正文:服务器返回的资源信息

 

4.HttpClient和HTTPURLConnection

HTTPURLConnection在的压缩和缓存机制可以有效的减少网络访问流量,在提升速度和省电方面也起到较大作用。另外HttpClient在android 6.0中被移除,HttpUrlConnction是唯一选择。

 

5.解析Volley

①.设计目标是社和进行数据量不大但是通信频繁的网络操作。

②.基本用法:

Volley请求网络都是基于请求队列的

StringRequest用法:返回数据类型是String

JsonRequst用法:返回数据是JSON格式的数据

ImageRequst(过时)

③.源码解析Volley

(1).从RequestQueue入手

1.1 RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());方法解析如下:

newRequestQueue在android版本大于等于2.3时,调用基于HttpUrlConnection的HurlStack,否则调用基于HttpClient的HttpClientStack

调用request.start方法

start方法中有一个缓存调度线程CacheDispatcher和四个网络调度线程NetworkDispatcher

1.2 mQueue.add(request)方法解析

如果不能缓存,加入到网络请求队列。如果能缓存,判断当前是否有相同的请求且还没有返回结果,如果有,加入到等待队列,如果没有,加入到缓存队列。

(2)CacheDispatcher缓存调度线程

从缓存队列中取出请求,判断是否取消,如果没有取消则判断请求是否有缓存的响应,

如果有缓存响应并且没有过期,则对缓存响应进行解析并回调给主线程,

反之则将请求加入网络调度队列。

(3)NetworkDispatcher网络调度线程

得到响应,将响应加入到缓存中,最后回调到主线程

 

如下图Volley请求流程

android 进阶之光 第五章 网络编程与网络框架

 

6.解析OkHttp

android 4.4版本,系统内置OkHttp。

①.OkHttp基本用法

(1).异步GET请求:调用的是enqueue方法,注意回调并非UI线程(想同步也可以调用excute方法)

(2).异步post请求:请求体okHttp2.x版本的FormEncodingBuilder改成FormBody,其他与get请求类似。

(3).异步上传文件:定义类型,其他类似

(4).异步下载文件

(5).异步上传Multipart文件

(6).设置超时和缓存:支持连接,写入,读取的超时时间

(7).取消请求:call.cancel可以立即取消一个请求

②.源码解析OkHttp

特点:拦截器,缓存策略,失败重连策略,复用连接池技术

android 进阶之光 第五章 网络编程与网络框架

 

7.解析Retrofit 

底层基于OkHttp,使用注解方式提供功能

①.基本用法

注解分类:请求方法注解,标记类注解,参数类注解。

②.源码解析

baseUrl是必须的

create方法中用到了反射生成动态代理类

executorCallbackCall方法回调到主线程

 

 

 

 

相关文章: