ListView的性能优化的一丢丢经验

来源:互联网 发布:黑芯木莲 淘宝 编辑:程序博客网 时间:2024/06/06 07:03

在使用listview的过程中,会碰到滑动卡顿的问题。这个问题尤其在item view的布局比较复杂的时候存在。带来的使用体验会很差,在一些较低端的设备上,甚至有可能发生anr。大致说一下我自己的一点经验,高手还请帮忙补充,多多益善~~

  1. 使用viewHolder
    这个其实已经算是一个很基础、近乎标准的东东了,但是毋庸置疑它很重要。
  2. 避免过度绘制
    android 每隔16ms,也就是60fps会发出一个VSYNC信号,通知渲染UI,如果渲染时间过久,就会导致卡顿。更详细的所以减少过度绘制是及其有必要的。
    具体的方法可以在手机的开发者选项中找到“调试GPU过度绘制“,打开这个功能,颜色越鲜艳的表明过度绘制的程度越强。根据这个,去检查自己的视图,是不是有冗余的layout嵌套,是不是有没用的layout等等。
  3. 不在getview中进行耗时操作
    这个是不论mvc还是mvp的开发模式都有的理念:view只负责显示视图,不去做数据的处理或者业务逻辑的处理,应该丢给model去搞。事实上,我在很多地方看到的,在getView方法中一大堆的逻辑,还有耗时处理。
    一个明显的例子就是把表情的转换放在getview中。尽管已经有了viewHolder机制,但是getview仍然是被频繁使用的方法,如果表情转换的算法写的一般(甚至很渣),如果用户要同时显示很多表情,那么卡顿就无法避免。
    如果getView中的item视图有耗时的动画效果,也建议使用surfaceView在子线程处理。
  4. 不在getView中new 例如listener的实例
    因为getView是很频繁调用的,在里面new 会导致滑动的时候一大堆实例分配内存。
0 0
原创粉丝点击