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

原创 2015年06月25日 16:04:19

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;  
	}  
}  



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

网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决。下面提出一些优化: 1、采用线程池 2、内存缓存+文件缓存 3、内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严...
  • yangxi_001
  • yangxi_001
  • 2013年01月05日 14:22
  • 618

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

网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决。下面提出一些优化: 1、采用线程池 2、内存缓存+文件缓存 3、内存缓存中网上很多是采用SoftReference来防止堆...
  • pzzwdl
  • pzzwdl
  • 2013年08月22日 15:29
  • 419

Android异步加载学习笔记之四:利用缓存优化网络加载图片及ListView加载优化

如果不做任何处理,直接用网络加载图片在网速快的情况下可能没什么不好的感觉,但是如果使用移动流量或是网络不好的时候,问题就来了,要么用户会抱怨流量使用太多,要么抱怨图片加载太慢,如论从哪个角度出发,都不...
  • true100
  • true100
  • 2015年08月11日 21:02
  • 931

深入剖析Android之ListView从网络异步加载图片

深入剖析Android之ListView从网络异步加载图片 我写这篇博客参考了许多文章,其中要重点感谢的是Android ListView从网络获取图片及文字显示和他的英文版文章Android Cu...
  • benbendeda
  • benbendeda
  • 2015年01月26日 22:24
  • 2163

ListView异步加载图片,完美实现图文混排

昨天参加一个面试,面试官让当场写一个类似于新闻列表的页面,文本数据和图片都从网络上获取,想起我还没写过ListView异步加载图片并实现图文混排效果的文章,so,今天就来写一下,介绍一下经验。List...
  • u012702547
  • u012702547
  • 2015年11月08日 12:54
  • 5655

android 异步加载网络图片缓存机制

package com.scxh.android.util; import java.io.InputStream; import java.net.URL; import androi...
  • wojiaoxiaomai2014
  • wojiaoxiaomai2014
  • 2015年01月14日 17:18
  • 387

android 视频的缩略图 缓存机制和 异步加载缩略图

在这次的工作开发项目中,涉及到一个视频缩略图的视频列表;这个在大家看来,制作视频缩略图就是两行代码就搞定的事。确实是这样的,百度一下,每个帖子都知道制作视频缩略图的方法,在这里确实也是一样的,但是我要...
  • CSDN_LQR
  • CSDN_LQR
  • 2016年05月15日 16:32
  • 627

Android 解决ListView异步加载网络数据(图片文字)出现位置错乱以及优化ListView的加载

Android 多种方法解决以及优化ListView的加载网络数据程出现错乱的问题 1.普通的缓存机制存在的问题 下面的代码就是最常见的异步加载图片的方法: public Vi...
  • zhangtao19931104
  • zhangtao19931104
  • 2016年10月05日 17:07
  • 904

(BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明

listView只加载当前屏幕中的图片..异步加载.线程池管理,软引用缓存.最大优化listView...
  • u012677436
  • u012677436
  • 2014年02月27日 21:11
  • 2353

Android ListView异步加载网络图片

使用异步类AsyncTack。
  • bxk88
  • bxk88
  • 2015年04月29日 21:52
  • 246
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之ListView异步加载网络图片(优化缓存机制)
举报原因:
原因补充:

(最多只允许输入30个字)