ListView各种优化方法

一.ListView如何提高效率
当convertView为空时,用setTag()方法绑定一个存放控件的ViewHolder对象。当convertView不为空,重复利用
已经创建的view的时候,使用getTag()方法获取绑定的ViewHolder对象,这样就避免了findViewById对控件的层
层查询。
(1)复用ConvertView,使用历史的view
(2)自定义静态类ViewHolder,减少findViewById的次数
(3)异步加载数据
(4)使用SoftReference引用ImageView对象
二.ListView实现分页加载
(1)设置ListView的滚动监听器:setOnScrollListener(new OnScrollListener{})
在监听器中有两个方法:滚动状态发生变化的方法和ListView被滚动时调用的方法,在滚动状态发生改变的方法
中,有三种状态:
SCRLL_STATE_TOUCH_SCROLL,SCROLL_STATE_FLING SCROLL_STATE_IDLE
分批加载数据,只关心静止状态:关心最后一个可见的条目,如果最后一个可见条目就是数据适配器里的最后一
个,此时可加载更多数据。
三.ListView中优化图片
图片的优化策略比较多
1.处理图片的方式
如果ListView中自定义的Item中涉及到大量图片的,一定要对图片进行处理,因为图片所占的内存极大:
(1)不要直接拿路径就去循环BitmapFactory.decodeFile;使用Options保存图片的大小,不要加载图片到内存中
去。
(2)对图片一定要经过边界压缩尤其是对比较大的图片。
(3)在ListView中取图片时也不要直接拿路径去取图片,而是以弱引用代替强引用来存储图片信息,方便垃圾回
收器及时回收。
(4)在getView中做图片转换时,产生的中间变量一定及时释放。
2.异步加载图片基本思想
(1)即类似于xUtils框架中BitmapUtils的三级缓存,即内存,本地,网络
(2)ImageLoader里的线程使用了线程池,从而避免了过多线程频繁创建和销毁,如果每次总是new一个线程去执
行这是不可取的,好一点用AsyncTask类,其内部也是用到了线程池。在网络获取图片时,先是将其保存到sd卡,
然后再加载到内存,这么做的好处是加载到内存时可以做个压缩处理,以减少图片所占内存。
四.ListView中图片错位的问题的产生
图片错位问题的本质源于我们的ListView只用了缓存convertView,假设一种场景,一个 listview一屏显示九个
item,那么在拉出第十个 item 的时候,事实上该 item 是重复使用了第一个 item,也就是说在第一个 item 从
网络中下载图片并最终要显示的时候,其实该 item 已经不在当前显示区域内了,此时显示的后果将可能在第十
个 item 上输出图像,这就导致了图片错位的问题。所以解决之道在于可见则显示,不可见则不显示
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值