ListView优化

来源:互联网 发布:java整形转化为字符串 编辑:程序博客网 时间:2024/06/10 17:04

第一: 重用convertView

重用了convertView,减少了内存的消耗。通过判断convertView是否为null,是的话就需要产生一个视图出来,然后给这个视图数据,最后将这个视图返回给底层,呈现给用户。

第二、通常有一个内部类ViewHolder

class ViewHolder,这个ViewHolder,用来标识view中一些控件,方便进行一些事件相应操作的设置,比如onClick等等,这样可以不用每次都要findViewById了,减少了性能的消耗。
第三、ListView 布局文件写高度match_parent,写warp_content至少要测量4次,严重拖慢效率。

特别注意:

这里设置ViewHolder为static,也就是静态的,静态类只会在第一次加载时会耗费比较长时间,但是后面就可以很好帮助加载,同时保证了内存中只有一个ViewHolder,节省了内存的开销。

可以从三个方面来优化:

  1. 异步加载item
    显示在ListView上的每一个item,都是通过getView初始化的。因此,不要再getView中执行耗时操作。例如,图片的加载,无论是从网络获取,还是本地扫描,最好都通过异步的方式处理。
  2. 控制异步任务的执行频率
    例如,当用户刻意频繁上下滑动,或者快速下滑的时候,会产生很多个异步任务,这会造成线程池的拥堵,同时,这些任务很多完成后带来的UI更新,是没有意义的,因此,可以在列表滑动的时候停止异步任务的开启(比如图片的加载)。如何具体实现呢,可以给ListView或者GridView设置setOnScrollListener判断列表是否处于滑动状态,如果滑动,则停止异步任务开启。
  3. 开启硬件加速
    通过设置 Android:hardwareAccelerated=”true” 即可为Activity开启硬件加速
1 0