admin管理员组文章数量:1794759
Android的开发之&论网络加载框架(Android
目录
一:HTTP,TCP,UDP,Socket
1、TCP HTTP UDP三者的关系
2、TCP简介和特点
2、TCP简介和特点
3、UDP简介和特点
4、HTTP简介和特点
5、Socket简介和优缺点
二:HttpURLConnection和httpclient
1、HttpURLConnection简介
2、httpclient简介
三:android常用网络框架
1、Android-async-http 简介
2、android-afinal框架简介和特点
2、android-afinal框架简介和特点
3、android-xutils框架简介和特点
4、android-Volley框架简介和特点
5、android-OkHttp框架简介和特点
6、android-Retrofit框架简介和特点
一:HTTP,TCP,UDP,Socket简要介绍- TCP简要介绍
1、TCP HTTP UDP三者的关系:
(1)TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
(2)在网络层有:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
(3)在传输层中有:TCP协议与UDP协议。
(4)在应用层有:FTP、HTTP、TELNET、SMTP、DNS等协议。
(5)因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。 2、TCP简要介绍: TCP是面向连接的、传输可靠(保证数据正确性且保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。 3、TCP三次握手: 建立一个TCP连接时,需要客户端和服务器总共发送3个包。 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信.在 Socket 编程中,客户端执行connect()时。将触发三次握手。 首先了解一下几个标志,SYN(synchronous),同步标志,ACK (Acknowledgement),即确认标志,seq是Sequence Number(序列号)。 第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。 第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的序列号加1以,即X+1。 第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写序列号的+1。 4、tcp四次挥手 TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。 5、为什么连接的时候是三次握手,关闭的时候却是四次挥手? 因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来 同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,” 你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。 6、TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 7、TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。 3、UDP: 面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。 UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击…… UDP的 UDP缺点:不可靠,不稳定,因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。 4、 http HTTP协议即超文本传送协议(HypertextTransfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。 特点 HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接,从建立连接到关闭连接的过程称为“一次连接”,因此HTTP连接是一种“短连接” 1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。 2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。 HTTP是基于客户端/服务端(C/S)的架构模型 客户端发送一个HTTP请求到服务器的请求消包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成, HTTP响应也由四个部分组成,分别是:状态行、消报头、空行和响应正文。 HTTP优点: (1)基于应用级的接口使用方便 (2)程序员开发水平要求不高,容错性强 HTTP缺点: (1)传输速度慢,数据包大(Http协议中包含辅助应用信) (2)如实时交互,服务器性能压力大。 (3)数据传输安全性差 5、Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 Socket 优点: (1) 传输数据为字节级,传输数据可自定义,数据量小(对于手机应用讲:费用低) (2)传输数据时间短,性能高 (3)适合于客户端和服务器端之间信实时交互 (4)可以加密,数据安全性强 Socket缺点: (1)需对传输的数据进行解析,转化成应用级的数据 (2)对开发人员的开发水平要求高 (3)相对于Http协议传输,增加了开发量二:HttpURLConnection和httpclient
在Android开发中网络请求是最常用的操作之一, Android SDK中对HTTP(超文本传输协议)也提供了很好的支持,这里包括两种接口: 1、标准Java接口(java.NET) —-HttpURLConnection,可以实现简单的基于URL请求、响应功能; 2、Apache接口(org.appache.http)—-HttpClient,使用起来更方面更强大。 但在android API23的SDK中Google将HttpClient移除了。Google建议使用httpURLconnection进行网络访问操作。 HttpURLconnection是基于http协议的,支持get,post,put,delete等各种请求方式,最常用的就是get和post,下面针对这两种请求方式进行讲解。 1、HttpURLConnection 在JDK的java包中已经提供了访问HTTP协议的基本功能的类:HttpURLConnection。 HttpURLConnection是Java的标准类,它继承自URLConnection,可用于向指定网站发送GET请求、POST请求。 2、httpclient HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 功能介绍 三:android常用网络框架 1、Android-async-http Android-async-http 是一个强大的网络请求库,这个网络请求库是基于 Apache HttpClient 库之上的一个异步网络请求处理库,网络处理均基于 Android 的非 UI 线程,通过回调方法处理请求结果。 android-async-http 是一个强大的第三方开源网络请求库。可惜的是 Android 6.0 (api 23) SDK,不再提供 org.apache.http.* (只保留几个类)。 优点: (1) 在匿名回调中处理请求结果 (2) 在 UI 线程外进行 http 请求 (3) 文件断点上传 (4) 智能重试 (5) 默认 gzip 压缩 (6) 支持解析成 Json 格式 (7) 可将 Cookies 持久化到 SharedPreference 2、afinal afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。 简介 在android应用开发中,通过afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过afinal的orm框架,无需任何配置信,一行代码就可以对android的sqlite数据库进行增删改查操作。同时,afinal内嵌了finalHttp等简单易用的工具,可以轻松的对http请求进行操作。 主要组件 FinalHttp:用于请求http数据,直接ajax方式请求,文件上传, 断点续传下载文件等 FinalBitmap:用于显示bitmap图片,而无需考虑线程并发和oom等问题。 FinalActivity:完全可以通过注解方式绑定控件和事件,无需编写代码。 FinalDb:android中sqlite的orm框架,一行代码搞定增删改查。 特点 设计简单小巧灵活 orm零配置,但可以配置,可以通过灵活的注解配置达到更加强大的功能 数据库查询支持DbModel,可以轻松的进行各种复杂的查询 android的ui和事件绑定完全通过注解的方式,无需编写一行代码 http请求支持ajax方式请求 体积小(不到100KB),不依赖第三方jar包 FinalDB优点 android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。 FinalDb的缺点 目前暂时不支持复合主键,并且对SQL语句的支持也非常有限,一些比较复杂的业务逻辑实现非常麻烦! 3、xUtils简介 xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能,下面来看看官方(github/wyouflf/xUtils3)对xUtils3的介绍:- xUtils包含了很多实用的android工具;
- xUtils支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响;
- xUitls最低兼容android 2.2 (api level 8)!
- xUtils3变化较多所以建立了新的项目不在旧版(github/wyouflf/xUtils)上继续维护, 相对于旧版本:
- HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略;
- 支持标准的Cookie策略, 区分domain, path;
- 事件注解去除不常用的功能, 提高性能;
- 数据库api简化提高性能, 达到和greenDao一致的性能;
- 图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转。
- android中的ioc(控制倒转)框架,完全注解方式就可以进行UI,资源和事件绑定;
- 新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
- 目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
- 支持同步,异步方式的请求;
- 支持大文件上传,上传大文件不会oom;
- 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
- 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
- 返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
- 加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
- 支持加载网络图片和本地图片;
- 内存管理使用lru算法,更好的管理bitmap内存;
- 可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…
- android中的orm(对象关系映射)框架,一行代码就可以进行增删改查;
- 支持事务,默认关闭;
- 可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
- 支持绑定外键,保存实体时外键关联实体自动保存或更新;
- 自动加载外键关联实体,支持延时加载;
- 支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
- JSON,图像等的异步下载;
- 网络请求的排序(scheduling)
- 网络请求的优先级处理
- 缓存
- 多级别取消请求
- 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
- 非常适合进行数据量不大,但通信频繁的网络操作
- 可直接在主线程调用服务端并处理返回结果
- 可以取消请求,容易扩展,面向接口编程
- 网络请求线程NetworkDispatcher默认开启了4个,可以优化,通过手机CPU数量
- 通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致
- 通信更快、更稳定、更简单
- 使用的是HttpClient的,HttpURLConnection类
- 6.0不支持的HttpClient了,如果想支持得添加org.apache.http.legacy.jar
- 对大文件下载Volley的表现非常糟糕
- 只支持HTTP请求
- 图片加载性能一般
- 不适合进行大数据的上传和下载
- 不能下载文件:这也是它最致命的地方
- 请求的方法参数注解可以定制
- 支持同步、异步和RxJava
- 超级解耦(我最爱)
- 可以配置不同的反序列化工具来解析数据,如json、xml等
版权声明:本文标题:Android的开发之&论网络加载框架(Android 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686822844a107093.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论