AsyncHttpClient 加载图片
2015-11-23 17:09
411 查看
注
原博:http://blog.csdn.net/zhangphil
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网络数据交互时候,代码运行比较稳定。
原博:http://blog.csdn.net/zhangphil
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(); } }); } }<span style="font-size: 13.63636302947998px;"> </span>
布局文件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第三方异步网路加载库AsyncHttpClient
- http轮询服务器
- 网络连接与重传策略
- http://www.open-open.com/
- http://www.open-open.com/
- HTTP报文
- Win7系统设备管理器里没有网络适配器的原因及解决方法
- 网络舆情分析技术 读书笔记1
- Linux(CentOS)网络流量实时监控(iftop)
- 基础网络学习反馈(仅作新手参考)
- 《STL系列》之vector原理及实现 http://www.cnblogs.com/hlxs/p/3737687.html
- [python&php 网络编程]从网络时间服务器获取并打印当前时间
- [Servlet]HttpSession的事件监听、HttpServletRequest的事件监听
- Delphi使用IdHttp 获取 HttpsURL内容
- Volley框架支持HTTPS请求。
- [python&php 网络编程]重用socket地址
- ServletRequest,HttpServletRequest ServletResponse,ServletResponse的区别
- JAVA调用HTTPS双向认证API
- 学习日记--网络通信框架--Volley应用
- 强大的网络通信框架(实现缓存)--第三方开源--volley