ListView中如何优化图片

ListView中如何优化图片

图片的优化策略比较多。

1、处理图片的方式:
如果ListView中自定义的Item中有涉及到大量图片的,一定要对图片进行细心的处理,
因为图片占的内存是ListView项中最头疼的,处理图片的方法大致有以下几种:
①    不要直接拿路径就去循环BitmapFactory.decodeFile;使用Options保存图片大小、不要加载图片到内存去。
②    对图片一定要经过边界压缩尤其是比较大的图片,如果你的图片是后台服务器处理好的那就不需要了
③    在 ListView 中取图片时也不要直接拿个路径去取图片,而是以WeakReference( 使 用 WeakReference 代 替 强 引 用 。 比 如 可 以 使 用WeakReference mContextRef)、SoftReference、WeakHashMap等的来存储图片信息。
④    在getView中做图片转换时,产生的中间变量一定及时释放

2、异步加载图片基本思想:
1)    先从内存缓存中获取图片显示(内存缓冲)
2)    获取不到的话从SD卡里获取(SD卡缓冲)
3)    都获取不到的话从网络下载图片并保存到SD 卡同时加入内存并显示(视情况看是否要显示)

原理:
优化一:
先从内存中加载,没有则开启线程从SD卡或网络中获取,这里注
意从SD卡获取图片是放在子线程里执行的,
否则快速滑屏的话会不够流畅。
优化二:于此同时,在adapter里有个busy变量,表示listview是否处于滑动状态,如果是滑动状态则仅从内存中获取图片,
没有的话无需再开启线程去外存或网络获取图片。
优化三:ImageLoader里的线程使用了线程池,从而避免了过多线程频繁创建和销毁,如果每次总是new一个线程去执行这是非常不可取的,好一点的用的AsyncTask类,其实内部也是用到了线程池。在从网络获取图片时,先是将其保存到sd卡,然后再加载到内存,这么做的好处是在加载到内存时可以做个压缩处理,以减少图片所占内存。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值