Android UI 分析工具篇

xiaoxiao2021-02-27  218

Android UI 探析


介绍

一般不管是游戏还是App都会要求FPS(每秒帧率)不能低于30,如果低于30就会产生不顺畅的感觉。

App的性能目标为60FPS。也就是一帧在16ms = 1000ms/60的时间内处理完。如果处理不完则就会出来drop frames的情况,可在logcat里面查看


表现

UI执行动画滑动ListViewActivity或者fragment切换时的卡顿

原因

layout太过复杂UI上有层叠太多的绘制单元动画执行的次数过多被忽视的一点:GC操作 Dalvik ART 新生代,老年代,永久代每一个级别的内存区域都有固定的大小,执行GC操作的时候,任何线程的任何操作都会需要暂停内存抖动

检查

开发者选项->调试GPU过度绘制开发者选项->GPU呈现模式分析->条形图 绿色的横线——16ms蓝色代表测量绘制Display List的时间红色代表OpenGL渲染Display List所需要的时间黄色代表CPU等待GPU处理的时间开发者选项->GPU呈现模式分析->在…中 adb shell dumpsys gfxinfoSystrace 重点推荐Hierarchy View 绿灯——高于50%的速度黄灯——低于50%的速度红灯——需要改进的极慢速度

待优化点

修改三红灯View注意List滑动帧率,提前加载多个?Static holder

《Effective java》——如果声明成员类不要求访问外围实例,就要始终把static修饰符放在它的声明中,是它成为静态成员类,而不是非静态成员类


重点和总结

对于多层嵌套的UI建议使用自定义View修改View的大小会触发整个HierarcyView的重新计算大小的操作。 如果是修改View的位置则会触发HierarchView重新计算其他View的位置。如果布局很复杂,这就会很容易导致严重的性能问题。比如频繁GC,清空DisplayList重新测量。重写了onDraw方法的view,可以使用canvas.clipRect()Inflate而不是setVisiblity
转载请注明原文地址: https://www.6miu.com/read-12833.html

最新回复(0)