一次性了解主流Android网络开发

Posted 扣丁学堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一次性了解主流Android网络开发相关的知识,希望对你有一定的参考价值。

扣丁学堂:www.codingke.com

ios 开发课程:C、OC、Swift、UI、专题、项目

android开发课程:Java、核心组件、UI、专题、项目

Cocos2d开发课程:C++、基础、专题、项目

在Android开发的时候,网络这个模块是必不可少的,无论是加载图片还是向服务器请求数据等等一系列操作,你都离不开网络!既然网络模块对安卓应用那么重要!身为开发者的你,就需要考虑的一个问题是:该用什么什么方式去跟服务器交互呢?事实上,这一方面已经有许多不错的开发的库提供给开发者使用了,例如:okhttp, retrofit,android-async-http,volley,你甚至可以按照自己的需求混合使用,以到达到目的,当然,哪个适合你,就得看看你app是什么类型了!对症下药嘛!


在网络开发库出现之前,在 Android 中完成网络模块简直是噩梦,而现在只需要找到最符合项目需求的解决方案就够了。


OkHttp


OkHttp是一个全新的、快速、有效的 Http 客户端,它支持 HTTP/2 和 SPDY,而且能帮你完成许多事情。如果想要知道联网有多麻烦的话,看一看 OkHttp 的源码你就知道了,OkHttp 帮我们完成了诸如连接池、解压缩、缓存……等等操作。OkHttp 表现得就像传输层。

OkHttp 使用了 Okio,Okio 是对 java.io 和 java.nio 进行补充的库,主要用于简化对数据的访问、存储和处理。




优点:

  • 支持SPDY,允许连接同一主机的所有请求分享一个socket。 如果SPDY不可用,会使用连接池减少请求延迟。 

  • 使用GZIP压缩下载内容,且压缩操作对用户是透明的。 利用响应缓存来避免重复的网络请求。 当网络出现问题的时候,OKHttp会依然有效,它将从常见的连接问题当中恢复。


不足:

  • 证书部署灵活性降低, 一旦变更证书必须升级程序.

  • 消息回来需要切到主线程,主线程要自己去写,第二传入调用比较复杂。


Volley


Volley 是一个简化网络任务的库,负责处理请求、加载、缓存、线程、异步等等操作,它能处理 JSON 格式的数据,图片,缓存,纯文字以及允许开发者实现一些自定制服务。

Volley 被设计用于 RPC 模式的网络操作,在耗时短的操作中表现的很好。

Volley在Android 2.2以及之前版本的系统上运行时传输层是Apache HttpClient,大于Android 2.2的系统版本则是 HttpURLConnection。问题在于这些 Http 栈在不同 Android 版本中存在许多问题。Volley 允许开发者轻松地配置 OkHttp 为它的传输层。


一次性了解主流Android网络开发


优点:


  • 默认Android2.3及以上基于HttpURLConnection,2.3及以下基于HttpClient;

  • 符合Http缓存语义的缓存机制(提供了默认的磁盘和内存等缓存);

  • 请求队列的优先级排序;

  • 提供多样的取消机制;

  • 提供简便的图片加载工具;


 不足:

它只适合数据量小,通信频繁的网络操作,如果是数据量大的,像音频,视频等的传输,还是不要使用Volley为好.


Android-async-http


这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法(匿名内部类)处理请求结果。 


优点:


  1. 使用HttpClient 4.3.6版本而不是Android 提供的DefaultHttpClient;

  2. 兼容安卓API 23(6.0)和更高的版本;

  3. 库很小,jar包小于100K;

  4. 支持重试机制;

  5. cookie的管理,内部实现用的是Android的SharedPreferences;

  6. 通过BaseJsonHttpResponseHandler和各种json库集成; 


不足:

  • 不建议使用AsyncHttpClient 因为这种方式,是封装好了,有发起请求的,有更新界面的

  • 搞java的都知道MVC的开发模式通常情况下,我们会将发请求这部分封装好,然后通过某个方法来解析数据再将数据返回给Activity来更新界面


Retrofit 


Retrofit 是一套 RESTful 架构的 Android(Java) 客户端实现,基于注解,提供 JSON to POJO(Plain Ordinary Java Object ,简单 Java 对象),POJO to JSON,网络请求(POST,GET, PUT,DELETE 等)封装。

既然只是一个网络请求封装库,现在已经有了那么多的大家已经耳熟能详的网络请求封装库了,为什么还要介绍它呢,原因在于 Retrofit 是一套注解形的网络请求封装库,让我们的代码结构更给为清晰。它可以直接解析JSON数据变成JAVA对象,甚至支持回调操作,处理不同的结果。主要是 Retrofit 能很好的与 RxAndroid 配合使用。


  • Retrofit对输入和输出做了封装,通过TypedOutput向服务器发送数据,通过TypedInput读取服务器返回的数据。

  • 通过MultipartTypedOutput支持文件上传,读取服务器数据时,如果要求直接返回未解析的Response,Restonse会被转换为TypedByteArray,所以不能是大文件类的

  • Retrofit支持不同的Log等级,当为LogLevel.Full时会把Request及Response的Body打印出来,所以如果包含文件就不行了。

  • Retrofit默认使用GsonConverter,所以要想获取原始数据不要Retrofit解析,要么自定义Conveter,要么直接返回Response了,返回Response也比较麻烦。


一般项目用Volley+OkHTTP,可支持http,https SDDY等,还可以保持Volley的优势,支持频繁的网络请求,Volley和Activity生命周期结合做好,离开页面可以取消网络。如果请求网络请求复杂,项目比较新,并且你想学习使用rxjava嵌套请求多,团队技术水平高的话,可以使用retrofit+okhttp+RxAndroid!

对于简单网络请求上面的基本都能满足需求,对于复杂网络请求,那么问题来了有多复杂? 

最后一点,也是最重要的,无论用哪个网络库,都要封装一层,别问我怎么知道的。(各种坑)


本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


程序世界


嘿嘿,这里是副标题的啦!

千锋扣丁学堂官方群 148715490
千锋扣丁iOS公开课群 150095894
千锋扣丁Android公开课群 477476602



联系我们:    

扣丁学堂:www.codingke.com

官方微博:http://weibo.com/codingke

邮箱:codingke@1000phone.com         



以上是关于一次性了解主流Android网络开发的主要内容,如果未能解决你的问题,请参考以下文章

android app开发中常用到哪些开源框架

网易考拉Android客户端网络模块设计

网易考拉Android客户端网络模块设计

这一次就彻底了解Android Framework 源码解析(系统启动/AMS/Binder)

Android 开发技术周报 Issue#277

Android集成华为推送的问题总结