关于android中图片加载的思考

1、图片来源:网络资源、本地资源(sdcard)、资源文件;三者的读取速度依次是:资源文件》本地资源》网络资源

所以,对于经常要用到的图片,可以存放在资源文件中;

2、对于网络资源的图片下载的思考:

1)对于不会变动的图片可以一次下载下来存到手机中(谨慎选择存储到SD卡中,因为可能会检测不到SD卡而使程序无法使用);

2)对于偶尔变动的图片可以在服务器中保存一个version,每次检测version是否变动再决定是否下载(此方法同样适用于App的检测更新);

3)对于经常变动的图片,like 一些列表信息;则适合一张一张的下载;此处可以优化的地方:

a、下载的时候使用线程池(不用每次都new Thread);当不再需要线程池的时候要调用其shutdown方法;

b、使用缓存;有两种:硬盘缓存 (手机存储)、内存缓存(LruCache);注意:在2.3以后,垃圾回收器更倾向于回首软引用和弱引用的对象,这使得软引用和弱引用的对象不再可靠;使用LruCache可以保证对象在使用过程中不被垃圾回收器回收,而且可以自定义其最大使用内存,所以内存缓存推荐使用LruCache;推荐一篇文章,详细介绍了LruCache的用法:http://blog.csdn.net/guolin_blog/article/details/9316683

     c、当在滑动状态时不更新;只有在idle state 才进行更新;


3、对于图片加载出现OOM错误的问题?避免出现OOM的几种方法:

1、对不再使用的Bitmap进行回收:bitmap.recycle();注意:要确保bitmap不再使用再进行回收,否则会报错 java.lang.RuntimeException: trying to use a recycled bitmap

   2、降低分辨率:这样图片会变小但是会不清晰,看实际需求,比如如果是想形成缩略图则可以使用此方法;尽量确保图片大小跟你需要的大小差不多;

3、可以捕获OutOfMemoryError ,这样就不会出现force close,改善用户体验;具体代码如下:

Bitmap bitmap = null;

  try {

  // 实例化Bitmap

  bitmap = BitmapFactory.decodeFile(path);

  } catch (OutOfMemoryError e) {

  //

  }

  if (bitmap == null) {

  // 如果实例化失败 返回默认的Bitmap对象

  return defaultBitmapMap;

  }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值