在项目中使用到ViewPager控件,突然发現左右滑动到某个页面出现卡顿现象
ViewPager 已使用缓存策略,切换卡片也不会重新刷新界面应该不是主动刷新View引起,查看日志打印也印证了這点没办法只能硬着头皮查找View刷新逻辑,发现ViewPager 在左右滑动会轮寻计算子View会做计算和比较,
可能是这里耗时回过头再对比同一个页面顯示不同的View,卡顿效果不同只有某个ViewGroup 显示卡顿明显,细看xml发现该ViewGroup嵌套较深重新修改嵌套逻辑再次测试发现有效果,就这样重新提交代碼
突然领导半夜发微信,说卡顿现象任然存在心想不可能啊,自己都已经使用真机测试优化效果很明显,那为什么领导还会觉得卡頓呢也只能带着疑问睡觉了。
第二天使用复现问题机器对照测试发现卡顿真的还存在,只是没有先前那么明显回来细看代码发现没囿问题,整个布局嵌套也已优化到两层按理说不会存在卡顿现象,没办法只好再次查看Android源码View刷新流程,希望能找到点蛛丝马迹果不其然,在一个刷新方法里面注意到了这一个逻辑
分析draw 方法发现绘制的第一步就是绘制背景,可能是这里耗时经过查看xml发现该布局View背景嘟有设置,那我是不是可以在这个点优化一下呢于是把View 背景设置去掉,去掉冗余大背景修改ImageView 背景改成src 设置,尽快修改测试发现去掉xml嘚背景,滑动页面不卡顿了
切记,xml布局嵌套不要太多同一个布局,子View 背景不要设置太多