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 8.1 中Systemui中的常见修改(八)SystemUI加载流程
  2. Android中使用WebView, WebChromeClient和WebViewClient加载网页
  3. Universal-Image-Loader(android图片缓存)
  4. [Android] AsyncTask使用实例---加载网络图片
  5. Android之网络请求8————OkHttp源码5:缓存相关
  6. Android:屏幕旋转时,禁止Activity重新加载
  7. Android9.0 P 电源管理&android各版本电量优化功能策略
  8. android中图片的三级cache策略(内存、文件、网络)之三:文件缓存策略
  9. 「转载」彻底解析Android缓存机制——LruCache

随机推荐

  1. Android中callback(接口回调)机制
  2. [置顶] Android下实现自动关机的方法总结
  3. android:解决 ScrollView嵌套RecyclerView
  4. [Android Samples视频系列之ApiDemos] Ap
  5. Android 动态添加View 并设置id
  6. Android SDK 有bug
  7. android 的ListView中,判断其已滚动到最顶
  8. Android安全论文汇集
  9. 动态加载Dex的原理
  10. MT6573默认锁屏界面修改