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

来源:未知 责任编辑:责任编辑 发表时间:2015-01-01 13:14 点击:

在应用中经常需要下载很多的图片,因此,写好图片下载部分的代码非常关键。不好的代码很容易创建太多的对象,导致经常执行GC,接着就出现了ANR;也很容易导致内存溢出OOM。
 
现在,我从防止ANR和OOM的角度写下载图片的代码。再来分析一下需求,当我需要为图片列表下载很多张图片时,我期望图片是有顺序地一张一张显示,而不是开启很多线程同时下载多张图片(注意:这样也会影响每个线程的执行速度)。
 
 
Java代码 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Handler; 
import android.os.Message; 
 
public class ImageDownloadThread extends Thread { 
    //单例类 
    private ImageDownloadThread() {} 
    private static ImageDownloadThread imageDownloadThread = null; 
    public static ImageDownloadThread getInstance() { 
        if (imageDownloadThread == null) { 
            imageDownloadThread = new ImageDownloadThread(); 
            imageDownloadThread.start();//创建后立刻运行 
        } 
        return imageDownloadThread; 
    } 
     
    //缓存下载图片 
    private Map<String, String> cache = new HashMap<String, String>();//KEY:图片URL;VALUE:下载后的图片路径 
    public boolean isDownload(String imageUrl) { 
        return cache.containsKey(imageUrl); 
    } 
    public Bitmap downloadWithCache(ImageDownloadItem item) { 
        if (cache.containsKey(item.imageUrl)) { 
            Bitmap bitmap = BitmapFactory.decodeFile(cache.get(item.imageUrl)); 
            return bitmap; 
        } else { 
            addDownloadItem(item); 
        } 
        return null; 
    } 
    public void downloadWithoutCache(ImageDownloadItem item) { 
        addDownloadItem(item); 
    } 
 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Android 完全退出程序
  • 原创:Android应用开发-Andorid歌词秀,含源码
  • android 屏幕保护
  • Android手机软件汉化教程---第四课 dex文件汉化
  • 众多Android 开源项目推荐,给力工作给力学习
  • Android Audio代码分析4
  • Android得到已安装的应用程序信息!
  • Android开发者指南(29) —— USB Host and Accessory
  • Android成长的幕后推手:工程师鲁宾
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1