Android之ListView异步加载网络图片(优化缓存机制)

http://blog.csdn.net/zircon_1973/article/details/7693839

本地缓存实现的思路


本地SDK卡缓存:

首先从内存缓存中查找(主线程中可以从内存获取,因为所有代码执行也在内存中)

然后开启线程

下载网络图片:在下载网络图片之前,在run方法中先从本地磁盘获取,如果从磁盘获取成功,则返回,如果磁盘不存在再发起网络请求图片


// 最主要的方法
	public void DisplayImage(String url, ImageView imageView) {
		imageViews.put(imageView, url);
		//1. 先从内存缓存中查找


		Bitmap bitmap = memoryCache.get(url);
		if (bitmap != null)
			imageView.setImageBitmap(bitmap);
		else {
			//2. 若没有的话则开启新线程加载图片(<span style="color:#ff0000;"><strong>从本地磁盘加载图片也放在线程里</strong></span>)
			queuePhoto(url, imageView);
			imageView.setImageResource(stub_id);
		}
	}

在Thread的run方法中调用getBitmap()


private Bitmap getBitmap(String url) {  
	File f = fileCache.getFile(url);  

	//<span style="color:#ff0000;"><strong> 1.先从文件缓存中查找是否有  </strong></span>
	Bitmap b = decodeFile(f);  
	if (b != null)  
		return b;  

	// <strong>2.最后从指定的url中下载图片 </strong> 
	try {  
		Bitmap bitmap = null;  
		URL imageUrl = new URL(url);  
		HttpURLConnection conn = (HttpURLConnection) imageUrl  
				.openConnection();  
		conn.setConnectTimeout(30000);  
		conn.setReadTimeout(30000);  
		conn.setInstanceFollowRedirects(true);  
		InputStream is = conn.getInputStream();  
		OutputStream os = new FileOutputStream(f);  
		CopyStream(is, os);  
		os.close();  
		bitmap = decodeFile(f);  
		return bitmap;  
	} catch (Exception ex) {  
		ex.printStackTrace();  
		return null;  
	}  
}  



阅读更多
文章标签: Listview本地缓存
想对作者说点什么? 我来说一句

listview 异步加载网络图片

2013年11月05日 76KB 下载

图文混排 异步加载

2014年11月10日 1.28MB 下载

listview异步加载图片

2014年08月28日 759KB 下载

没有更多推荐了,返回首页

不良信息举报

Android之ListView异步加载网络图片(优化缓存机制)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭