android UI卡顿问题学习

吾生也有涯,而知也无涯。这篇文章主要讲述android UI卡顿问题学习相关的知识,希望能为你提供帮助。
【android UI卡顿问题学习】转自https://blog.csdn.net/joye123/article/details/79425398
https://blog.csdn.net/zhenjie_chang/article/details/52584967
 
卡顿优化卡顿:从用户角度说,App操作起来缓慢,响应不及时,列表滑动一顿一顿的,动画刷新不流畅等等一些直观感受。从系统角度来说,屏幕刷新的帧率不稳定,无法保证每秒绘制60帧,也就是说有掉帧的情况发生。
 
对于开发过程,出现卡顿的主要原因是主线程做了一些不该做的事,或者主线程做不了事情了。

  • 布局渲染(解析、测量、布局、渲染)
  • 动画执行
  • Binder通信
  • 界面响应
主线程主要是做以上四个方面的工作,如果在主线程做一些耗时操作(网络请求、IO读写等),或者被其他线程挂起(GC),那么页面刷新无法在16ms内完成,就会出现掉帧的情况。
 
 
android UI卡顿问题学习

文章图片

  • 原色:没有过度绘制
  • 蓝色:过度绘制1次
  • 绿色:过度绘制2次
  • 粉色:过度绘制3次
  • 红色:过度绘制4次或更多
请注意,这些颜色是半透明的,因此,您在屏幕上看到的确切颜色取决于您的界面内容。可以通过此功能查看哪些页面的布局层级过深。
 

常见卡顿原因及解决方案 
过度绘制
去除不必要的背景色
  • 设置窗口背景色为通用背景色,去除根布局背景色。
  • 若页面背景色与通用背景色不一致,在页面渲染完成后移除窗口背景色
  • 去除和列表背景色相同的Item背景色
布局视图树扁平化
  • 移除嵌套布局
  • 使用merge、include标签
  • 使用性能消耗更小布局(TableLayout、ConstraintLayout)
减少透明色,即alpha属性的使用
  • 通过使用半透明颜色值(#77000000)代替
其他
  • 使用ViewStub标签,延迟加载不必要的视图
  • 使用AsyncLayoutInflater异步解析视图
 
主线程耗时操作
  • Json数据解析耗时(Cache类)
  • 文件操作(获取所属渠道名称)
  • Binder通信(获取系统属性(mac地址))
  • 正则匹配(Hybird 通信)
  • 相机操作:初始化、预览、停止预览、释放(反扫)
  • 组件初始化(推送)
  • 循环删除、创建View(更多页面)
  • WebView首次初始化
 
布局优化的一些策略1. < include> 标签
2. < viewstub> 标签
3.< merge> 标签
4.去除不必要的嵌套和View节点
5.减少不必要的infalte
6.View局部更新






    推荐阅读