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";@Overrideprotected 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() {@Overridepublic void onSuccess(int statusCode, Header[] headers,byte[] response) {BitmapFactory bitmapFactory = new BitmapFactory();Bitmap bitmap = bitmapFactory.decodeByteArray(response, 0,response.length);imageView.setImageBitmap(bitmap);}@Overridepublic 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》
文章链接:http://blog.csdn.net/zhangphil/article/details/45535693

更多相关文章

  1. 关于android应用程序的入口
  2. Android之使用Android-query框架进行开发(一)
  3. Android插件化开发之DexClassLoader动态加载dex、jar小Demo
  4. Android横竖屏切换方法
  5. [Android] 开发资料收集:动态加载、插件化、热修复技术
  6. Android中使用WebView, WebChromeClient和WebViewClient加载网页
  7. android 定时器(Handler Timer Thread AlarmManager CountDownTi
  8. Android中使用WebView, WebChromeClient和WebViewClient加载网页
  9. Activity的四种加载模式

随机推荐

  1. (转载)Android(安卓)之最新最全的Intent传
  2. Android(安卓)AAC模式,该与 MVP 分手了!
  3. Android事件分发中的ViewGroup
  4. Android(安卓)动画之AlphaAnimation应用
  5. android studio 更新 Gradle错误解决方法
  6. Fragment的使用
  7. Android(安卓)视频播放框架之TigerVideoP
  8. Mac android studio升级时提示 :Connecti
  9. Android(安卓)build过程中already define
  10. AndroidのBitmap之大图片优化