一次性了解主流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 为它的传输层。
优点:
默认Android2.3及以上基于HttpURLConnection,2.3及以下基于HttpClient;
符合Http缓存语义的缓存机制(提供了默认的磁盘和内存等缓存);
请求队列的优先级排序;
提供多样的取消机制;
提供简便的图片加载工具;
不足:
它只适合数据量小,通信频繁的网络操作,如果是数据量大的,像音频,视频等的传输,还是不要使用Volley为好.
Android-async-http
这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法(匿名内部类)处理请求结果。
优点:
使用HttpClient 4.3.6版本而不是Android 提供的DefaultHttpClient;
兼容安卓API 23(6.0)和更高的版本;
库很小,jar包小于100K;
支持重试机制;
cookie的管理,内部实现用的是Android的SharedPreferences;
通过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网络开发的主要内容,如果未能解决你的问题,请参考以下文章