转自https://blog.csdn.net/joye123/article/details/79425398

https://blog.csdn.net/zhenjie_chang/article/details/52584967

  卡顿优化

  卡顿:从用户角度说,App操作起来缓慢,响应不及时,列表滑动一顿一顿的,动画刷新不流畅等等一些直观感受。从系统角度来说,屏幕刷新的帧率不稳定,无法保证每秒绘制60帧,也就是说有掉帧的情况发生。

  对于开发过程,出现卡顿的主要原因是主线程做了一些不该做的事,或者主线程做不了事情了。

  • 布局渲染(解析、测量、布局、渲染)
  • 动画执行
  • Binder通信
  • 界面响应

  主线程主要是做以上四个方面的工作,如果在主线程做一些耗时操作(网络请求、IO读写等),或者被其他线程挂起(GC),那么页面刷新无法在16ms内完成,就会出现掉帧的情况。

    

  • 原色:没有过度绘制
  • 蓝色:过度绘制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局部更新

android UI卡顿问题学习的更多相关文章

  1. Android异常与性能优化相关面试问题-ui卡顿面试问题详解

    UI卡顿原理: “60fps(Frames Per Second每秒传输帧数) ----> 16ms” 针对上面标红的数字,下面具体说明一下:最主要的根源在于渲染性,Android会每隔16ms ...

  2. 性能优化九之UI卡顿分析

    在前一篇博客中提到内存抖动和耗时复杂的计算会导致UI卡顿. 那为什么内存抖动会导致UI卡顿呢? 其实在 性能优化一之内存与垃圾回收器 这篇文章中已经有所提及. 这里来详细说明一下: 渲染功能是应用程序 ...

  3. ART:Android 摆脱卡顿的希望?

    与 iOS 相比,Android 的用户体验有个相对糟糕的开始.在很长的时间里,界面一直丑小鸭,卡顿也是挥不去的痛.不过,在 Google 的全力推动,以及硬件厂商的响应下,Android 还是跨越各 ...

  4. Winform 界面执行耗时操作--UI卡顿假死问题

    UI卡顿假死问题 误区1:使用不同的线程操作UI控件和耗时操作(即,跨线程操作UI控件CheckForIllegalCrossThreadCalls = false;), 注意:此处只是为了记录... ...

  5. android切换卡顿解决方法

    如果想要让应用用户流畅的滑动体验的话,那么就必须对activity和fragment的生命周期有一个完整的概念以及在何种情况下会触发哪些事件. 在自己目前做的项目中,就遇到了这样的问题,那么就把自己的 ...

  6. Android 最简单的测试UI卡顿

    就两个类: public class BlockDetectByPrinter { private static final String START = ">>>> ...

  7. Android Studio 卡顿解决

    每次升级/安装 Android Studio 之后最好都修改一下这个参数:到 Android Studio 安装目录,找到 bin/studio(64?).vmoptions(文件名可能因操作系统而不 ...

  8. Android App卡顿慢优化之解决内存抖动及内存泄漏

    前面一篇博客说到了,内存抖动的第二种情况,就是必须在短时间内创建对象,但是要控制数量:这个问题目前可以使用对象池的方法解决. 3)Object Pools 在程序里面经常会遇到的一个问题是短时间内创建 ...

  9. Android 布局渲染流程与卡顿优化

    文章内容概要 一.手机界面UI渲染显示流程 二.16ms原则 三.造成卡顿的原因 四.过度绘制介绍.检测工具.如何避免造成过度绘制造成的卡顿 一.手机界面UI渲染显示流程 大家都知道CPU(中央处理器 ...

随机推荐

  1. Docker的特性解析

    Docker简介与入门:http://segmentfault.com/blog/p_chou/1190000000448808 Docker是个新生的事物,概念类似虚拟化.网上关于Docker入门的 ...

  2. (转) RabbitMQ学习之发布/订阅(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40887733 参考:http://blog.csdn.NET/lmj623565791/artic ...

  3. VS Code中编写html(4) 标签的宽高颜色背景设置

    1  <!+Tab键--> <!--有两个div标签时,分别设置style,有两种方法--> <div id="div1">第一个div标签:& ...

  4. ubuntu16.04 国内源(网易、阿里)

    ubuntu16.04 网易源 deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiversedeb htt ...

  5. jQuery样式操作

    获取样式和设置样式 <p class='myClass'  title='this is p'>this is p</p> 样式其实就是class属性所以设置和获取样式都能用a ...

  6. nyoj92-图像有用区域【BFS】

    "ACKing"同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色.    ...

  7. FFMpeg 常用命令格式转换,视频合成

    FFmpeg都是命令行的,用起来肯定不方便.但是,这对技术宅应该不成问题.下面,我就罗列一些比较实用的使用方法吧. FFmpeg的下载与安装 FFmpeg是开源的.但我们不必去下载它的源代码.下载已经 ...

  8. Problem 13

    Problem 13 # Problem_13 """ Work out the first ten digits of the sum of the following ...

  9. 《黑白团团队》第八次团队作业:Alpha冲刺 第三天

    项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目 填写团队名称 黑白团团队 填写具体目标 认真负责,完成项目 团队项目Github仓库地址链接. 第三天 日期:2019/6/17 成员 ...

  10. spring data JPA使用quartz定时器的具体实现

    第一步.在pom.xml中的配置 <!--quartz--> <dependency> <groupId>org.quartz-scheduler</grou ...