UI卡顿原理
60fps->16ms程序的大部分操作要在16ms内完成,listview 的item层叠了太多,有复杂动画导致。每一次虚拟机在GC的时候所有的线程也会停止。
Overdraw过渡绘制,多层次ui结构,某些像素区域被绘制很多次。GPU蓝 绿 红色 减少红色。多次层叠的view的background。
原因分析
1.人为在UI线程做了轻微耗时操作,导致UI卡顿。没有引起ANR。
2.布局Layout过于复杂,无法再16ms内渲染,背景布局不能重叠。
3.同一时间动画执行次数过多,导致cpu gpu负载过渡。
4.View频繁绘制导致measure layout,耗时累积过多,整个view频繁渲染。
5.内存频繁GC过多,导致暂时阻碍渲染操作。
6.冗余资源和逻辑导致加载和执行缓慢。
7.ANR。
解决办法
1.布局优化, include merge,尽量不存在冗余嵌套,适当的设置gone,invisible,使用item复杂的情况下使用自定义view。
2.列表及adapter,使用convertView。
3.背景和图片内存分配优化,图片缩略等。
4.避免ANR 不要再ui线程做耗时操作。