心静志远 | 技术会被淘汰,但思想会一直永存(多思考,多总结,多分享)
无线开发一定少不了与服务端进行交互,这自然离不开使用类似于HttpClient的工具包来发送和接受HTTP请求。常用的有一些这些:
1. Apache 的 HttpClient(Android2.3之前使用)
2. Android 简化扩展版 HttpUrlConnection
3. Google 推出的 Volley(在Android2.3之前使用HttpClient,之后使用HttpUrlConnection)
4. Git开源项目Okhttp (使用http+SPDY协议)
5. Android-async-http
6. Retrofit(默认使用Okhttp作为传输层)
7. Android Query
8. Android AsyncTaskHttpClient 与 HttpUrlConnection对比:
对于HttpClient 大家都比较熟悉,这里就不做多余阐述,为什么使用HttpUrlConnection呢?主要原因是因为HttpClient虽然稳定,但是太庞大了,在Android上不易做升级和扩展,所以才有了轻量级的HttpUrlConnection。HttpUrlConnection相比与HttpClient做的扩展点可以参考下面的博客。
参考:
http://blog.csdn.net/guolin_blog/article/details/12452307
http://android-developers.blogspot.com/2011/09/androids-http-clients.htmlVolley中使用的也是HttpUrlConnection,那么Volley在HttpUrlConnection上有没有改进呢?还有待查阅相关资料。
Android自带的AsyncTask:不推荐使用。
弊端:
1. 不支持环境改变;
2. 不能取消网络请求;
3. 没有简单的方法来做并发API调用;
4. 每个时刻只能有一个AsyncTask任务可以运行;
5. ancle()方法并不会起作用;
6. Activity被销毁,还保持Activity的引用时,可能导致内存泄露;
7. Activity reCreated时,可能导致AsyncTask的结果丢失;
8. 串行或并行的不确定性,依赖API Level的不同而不同;
AsyncTas阴暗的一面:http://bon-app-etit.blogspot.in/2013/04/the-dark-side-of-asynctask.htmlOkHttp、Volley、Retrofit三者对比:
Volley的特点:
1. Volley的优势在于处理小文件的http请求;
2. 在Volley中也是可以使用Okhttp作为传输层;参考:https://plus.google.com/+JakeWharton/posts/eJJxhkTQ4yU
3. Volley在处理高分辨率的图像压缩上有很好的支持;
4.?NetworkImageView在GC的使用模式上更加保守,在请求清理上也更加积极,networkimageview仅仅依赖于强大的内存引用,并当一个新请求是来自ImageView或ImageView离开屏幕时 会清理掉所有的请求数据。
5. Volley比Retrofit在内存错误处理上要更好。
Retrofit的特点:
1. 使用REST API时非常方便;
2. 传输层默认就使用OkHttp;
3. 支持NIO;
4. 拥有出色的API文档和社区支持
5. 速度上比volley更快;
OkHttp的特点:
支持SPDY(请求头压缩、并行请求、强制SSL、服务端推送);三者的性能基线:
其中Volley与Retrofit的对比,参考:http://instructure.github.io/blog/2013/12/09/volley-vs-retrofit/
三者对比参考:http://stackoverflow.com/questions/16902716/comparison-of-android-networking-libraries-okhttp-retrofit-volley