ListView的使用的一丢丢经验

在使用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 实例
    因为getView是很频繁调用的,在里面new 会导致滑动的时候一大堆实例分配内存,虚拟机会对其进行GC,GC的时候会卡顿主线程,导致页面卡顿。

  5. 滑动停止再加载image
    遇到listview加载图片等,应该当停止滑动的时候去加载。否则可能会浪费大量资源。

  6. 必要时启用硬件加速。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章