Android第三方异步网路加载库AsyncHttpClient内部实现缓存策略了吗?

简介: Android第三方异步网路加载库AsyncHttpClient内部实现缓存策略了吗?Android平台上的AsyncHttpClient是一款比较流行的Android异步网路加载库,在github上的网址是:https://github.


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》
文章链接:http://blog.csdn.net/zhangphil/article/details/45535693

相关文章
|
缓存 Java 数据库连接
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
文章介绍了MyBatis的缓存机制,包括一级缓存和二级缓存的配置和使用,以及如何整合第三方缓存EHCache。详细解释了一级缓存的生命周期、二级缓存的开启条件和配置属性,以及如何通过ehcache.xml配置文件和logback.xml日志配置文件来实现EHCache的整合。
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
缓存 监控 前端开发
在资源加载优化中,如何利用浏览器缓存提升性能?
通过以上这些方法,可以有效地利用浏览器缓存来提升资源加载的性能,减少网络请求次数,提高用户体验和应用的响应速度。同时,需要根据具体的应用场景和资源特点进行灵活调整和优化,以达到最佳的效果。此外,随着技术的不断发展和变化,还需要持续关注和学习新的缓存优化方法和策略。
564 159
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
687 1
|
Java Android开发
Android面试题经典之Glide取消加载以及线程池优化
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
490 2
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
377 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
存储 缓存 Java
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
163 0
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
184 0
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot引入Caffeine作为缓存库的问题如何解决
223 0