Android第三方异步网路加载库AsyncHttpClient内部实现缓存策略了吗?
2015-09-20 11:55
741 查看
Android第三方异步网路加载库AsyncHttpClient内部实现缓存策略了吗?
Android平台上的AsyncHttpClient是一款比较流行的Android异步网路加载库,在github上的网址是:https://github.com/loopj/android-async-http
但是AsyncHttpClient和另外比较著名的Android异步网络库 Volley和Glide不同的是,不像Volley和Glide内部已经实现好了缓存策略,AsyncHttpClient自身没有实现缓存策略。
实验可以表明这点。
实验方法:我写一个简单的Android小程序,仅仅加载一张从网络获取的图片(我的CSDN博客头像),在联网时候启动这个程序,然后关闭手机设备的所以网络连接,此时再次启动该程序。
先给出测试的程序所有代码:
测试的主Activity:MainActivity.java
布局文件activity_main.xml仅仅只有一个id为imageView的ImageView元素,在此不在赘述。
测试时候不要忘记添加网络访问权限,除此之外,我特意给这个测试程序添加了读写Android存储设备的权限。
实验发现,在联网状态下,ImageView的图片可以加载出来,在断网情况下ImageView无法加载出来,在错误日志中同样说明每次启动程序AsyncHttpClient都同样的去联网,即便是相同的URL资源。
查看AsyncHttpClient的源代码(截止本文写作时候的版本android-async-http-1.4.8,时间是2015年9月20,也许在未来,作者不排除像Android Volley或者Glide那样在内部把缓存策略一并实现),果然,AsyncHttpClient内部没有实现缓存策略。
这样就使得开发者在使用AsyncHttpClient时候需要特别注意,当代码中需要实现或者使用缓存时候,AsyncHttpClient无能为力,必须自己写一套缓存策略,或者仅仅使用AsyncHttpClient加载一些对缓存不敏感的代码开发场景,在一些缓存敏感(比如代码需要频繁的从网络读取大图片,但这些大图片数据在较短时间内是相同的)场景,可以考虑使用Android Volley或者Glide(Android Volley更深度的使用缓存,甚至在网络请求json数据时候也会不失时机的缓存!)。但是AsyncHttpClient有一个好处:就是在处理http网络数据交互时候,代码运行比较稳定。
附我写的一些参考文章:
《Android图片加载与缓存开源框架:Android Glide》
文章链接:/article/1810729.html
Android第三方异步网路加载库AsyncHttpClient内部实现缓存策略了吗?
Android平台上的AsyncHttpClient是一款比较流行的Android异步网路加载库,在github上的网址是:https://github.com/loopj/android-async-http
但是AsyncHttpClient和另外比较著名的Android异步网络库 Volley和Glide不同的是,不像Volley和Glide内部已经实现好了缓存策略,AsyncHttpClient自身没有实现缓存策略。
实验可以表明这点。
实验方法:我写一个简单的Android小程序,仅仅加载一张从网络获取的图片(我的CSDN博客头像),在联网时候启动这个程序,然后关闭手机设备的所以网络连接,此时再次启动该程序。
先给出测试的程序所有代码:
测试的主Activity:MainActivity.java
package zhangphil.http; import org.apache.http.Header; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends Activity { private final String url = "http://avatar.csdn.net/9/7/A/1_zhangphil.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView imageView = (ImageView) findViewById(R.id.imageView); AsyncHttpClient httpclient = new AsyncHttpClient(); httpclient.get(url, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] response) { BitmapFactory bitmapFactory = new BitmapFactory(); Bitmap bitmap = bitmapFactory.decodeByteArray(response, 0, response.length); imageView.setImageBitmap(bitmap); } @Override public void onFailure(int statusCode, Header[] headers, byte[] response, Throwable error) { error.printStackTrace(); } }); } }
布局文件activity_main.xml仅仅只有一个id为imageView的ImageView元素,在此不在赘述。
测试时候不要忘记添加网络访问权限,除此之外,我特意给这个测试程序添加了读写Android存储设备的权限。
实验发现,在联网状态下,ImageView的图片可以加载出来,在断网情况下ImageView无法加载出来,在错误日志中同样说明每次启动程序AsyncHttpClient都同样的去联网,即便是相同的URL资源。
查看AsyncHttpClient的源代码(截止本文写作时候的版本android-async-http-1.4.8,时间是2015年9月20,也许在未来,作者不排除像Android Volley或者Glide那样在内部把缓存策略一并实现),果然,AsyncHttpClient内部没有实现缓存策略。
这样就使得开发者在使用AsyncHttpClient时候需要特别注意,当代码中需要实现或者使用缓存时候,AsyncHttpClient无能为力,必须自己写一套缓存策略,或者仅仅使用AsyncHttpClient加载一些对缓存不敏感的代码开发场景,在一些缓存敏感(比如代码需要频繁的从网络读取大图片,但这些大图片数据在较短时间内是相同的)场景,可以考虑使用Android Volley或者Glide(Android Volley更深度的使用缓存,甚至在网络请求json数据时候也会不失时机的缓存!)。但是AsyncHttpClient有一个好处:就是在处理http网络数据交互时候,代码运行比较稳定。
附我写的一些参考文章:
《Android图片加载与缓存开源框架:Android Glide》
文章链接:/article/1810729.html
相关文章推荐
- IOS 网络开发框架
- iOS 对网络图片进行黑白化处理
- TCP/IP(1)链路层
- http协议的post请求
- 基于X86平台的PC机通过网络发送一个int(32位)整数的字节顺序
- 计算机网络之路由器与分组交换
- 计算机网络之路由器与分组交换
- iOS开发工具-网络封包分析工具Charles
- 检查 CPU 是否支持二级地址转换 - 摘自网络
- 长春和沈阳网络赛的DP
- ios9关于http不能正常使用的解决方法
- 一份快速实用的 tcpdump 命令参考手册
- Largest Point (2015沈阳赛区网络赛水题)
- Linux实现https方式访问站点
- TCP/IP 协议栈及 OSI 参考模型详解
- HTTP POST上传文件
- 2015年p2p网络借贷平台的发展现状
- HTTP POST,GET登陆代码演示
- HTTP POST上传
- 基于XBee进行ZigBee组网(一)——XBee介绍