首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

高效下载图片——防止内存溢出

2012-07-01 
高效率下载图片——防止内存溢出在应用中经常需要下载很多的图片,因此,写好图片下载部分的代码非常关键。不好

高效率下载图片——防止内存溢出

在应用中经常需要下载很多的图片,因此,写好图片下载部分的代码非常关键。不好的代码很容易创建太多的对象,导致经常执行GC,接着就出现了ANR;也很容易导致内存溢出OOM。

?

现在,我从防止ANR和OOM的角度写下载图片的代码。再来分析一下需求,当我需要为图片列表下载很多张图片时,我期望图片是有顺序地一张一张显示,而不是开启很多线程同时下载多张图片(注意:这样也会影响每个线程的执行速度)。

?

?

public View getView(int position, View convertView, ViewGroup vg) {final ImageView imageView;if (convertView != null) {imageView = (ImageView)convertView;} else {imageView = new ImageView(this);}//在实际应用中imageUrl值是不同的String imageUrl = "http://www.nxnet.net/yule/yljj/200710/W020071008388975463611.jpg";imageView.setTag(imageUrl);//设置下载项ImageDownloadItem item = new ImageDownloadItem();item.imageUrl = imageUrl;//如果是无需显示图片的情况(如预下载),无需设置PostDownloadListener监听器item.setPostDownloadListener(new PostDownloadListener() {@Overridepublic void update(Bitmap bitmap, String imageUrl) {ImageView imageViewByTag = (ImageView)imageView.findViewWithTag(imageUrl);if (imageViewByTag != null) imageViewByTag.setImageBitmap(bitmap);}});ImageDownloadThread imageDownloadThread = ImageDownloadThread.getInstance();Bitmap bitmap = imageDownloadThread.downloadWithCache(item);if (bitmap != null) {//从缓存中取到imageView.setImageBitmap(bitmap);}return imageView;}

热点排行