UI卡顿原理:

“60fps(Frames Per Second每秒传输帧数) ----> 16ms”

针对上面标红的数字,下面具体说明一下:最主要的根源在于渲染性,Android会每隔16ms会发出信号,触发对UI进行渲染,如果每一次都渲染成功,则就达到流畅画面所需要的60fps,也就是每秒60针,为了能够达到60fps,程序的大多数操作必须在16ms内完成,也就是1000ms/60=16ms,为什么要把标准设定在60fps呢?人脑对于画面的连贯性是有一定的限制的,而android系统把这种流畅的帧率规定在60fps,也就是每秒实现的帧数,算换过来就是16ms一帧,也就是一秒60帧,所以说为了保证不出现丢失帧数,我们一定要在16ms内处理这次的CPU和GPU的计算和渲染操作,另外还需知道当Dalvik虚拟机达到GC的时候所有线程都会暂停,所GC完之后线程才能够继续执行,也就是说如果在16ms进行界面渲染的时候正好遇到大量的GC操作就会导致渲染时间不够,从页导致卡顿问题。

overdraw(过度绘制):出现的原因是UI布局中有大量重叠的部份,比如Activity中有一个背景,而View也有自己的背景,类似于这种就会容易造成过度绘制,这个可以从开发者选项中进行观测,减少红色部份,尽量只有绿色部份。

UI卡顿原因分析:

  • 人为在UI线程中做轻微耗时操作,导致UI线程卡顿。
  • 布局Layout过于复杂,无法在16ms内完成渲染。
  • 同一时间动画执行的次数过多,导致CPU或GPU负载过重。
  • View过度绘制,导致某些像素在同一帧时间内被绘制多次,从而使CPU或GPU负载过重。
  • View频繁的触发measure、layout,导致measure、layout累计耗时过多及整个View频繁的重新渲染。
  • 内存频繁触发GC过多,导致暂时阻塞渲染操作。
  • 冗余资源及逻辑等导致加载和执行缓慢,良好的代码习惯也能提高UI的性能。
  • ANR。

UI卡顿总结:

  • 布局优化:用merge、viewStub标题;尽量不存在冗余嵌套和过于复杂的布局;如果布局是通用的可以用include来导入;尽量使用GONE替换INVIsible,因为invisible界面依然会绘制;尽量用weight替换长和宽;如果Item存在非常复杂的嵌套时可以考虑用自定义的View来改良来减少measure、layout的次数而提高性能。
  • 列表及Adapter优化:利用缓存及滑动监听,滑动时不去更新UI。
  • 背景和图片等内存分配优化。
  • 避免ANR。

Android异常与性能优化相关面试问题-ui卡顿面试问题详解的更多相关文章

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

    什么是OOM? 当前占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出Out Of Memory异常. 一些容易混淆的概念: 内存溢出:指的就是OOM. 内存抖动:是短时间 ...

  2. Android异常与性能优化相关面试问题-其他优化面试问题详解

    Android不用静态变量存储数据: 静态变量等数据由于进程已经被杀死而被初始化.在Android中应用进程不是安全的,因为它会有系统给kill掉,但是在实际中可能会有这样的一个假象:当app被杀掉之 ...

  3. Android异常与性能优化相关面试问题-内存管理面试问题详解

    内存管理机制概述: 分配机制:操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能够正常的运行,不至于内存不够使用,或者某个进程占用过多的内存. 回收机制:在系统内存不足的时候,系统有一 ...

  4. Android异常与性能优化相关面试问题-冷启动优化面试问题详解

    什么是冷启动: 冷启动的定义:冷启动就是在启动应用前,系统中没有该应用的任何进程信息.实际也就是要执行Application.onCreate()方法的那次启动. 冷启动 / 热启动的区别:热启动:用 ...

  5. Android异常与性能优化相关面试问题-内存泄漏面试问题讲解

    Java内存泄漏基础知识: Java的内存的分配策略 a.静态存储区:也叫方法区,主要是存放一些静态数据及全局变量等,在程序编译时就已经分配好了,并且在静态存储区中存放的变量在整个程序运行期间都存在. ...

  6. Android异常与性能优化相关面试问题-ANR异常面试问题详解

    什么是ANR? Application Not Responding 造成ANR的主要原因: 应用程序的响应性是由ActivityManager和WindowManager系统服务监视的,当监视到在A ...

  7. Android异常与性能优化相关面试问题-bitmap面试问题详解

    recycle: 对于Bitmap来说内存分为Java内存和Native内存,而当图片不用时建议调用一下recycle()方法来将native层的内存进行回收,下面看一下它的源码官方对它的解释: LR ...

  8. css3动画的性能优化_针对移动端卡顿问题

    这篇文章主要讲的是怎样制作流畅动画,特别是针对移动端.在这里我首先介绍制作动画的几种方法的优缺点:接着会着重介绍用css3制作动画的注意事项. 资源网站大全 https://55wd.com 设计导航 ...

  9. 转——Android应用开发性能优化完全分析

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...

随机推荐

  1. 无监督异常检测之LSTM组成的AE

    我本来就是处理时间序列异常检测的,之前用了全连接层以及CNN层组成的AE去拟合原始时间序列,发现效果不佳.当利用LSTM组成AE去拟合时间序列时发现,拟合的效果很好.但是,利用重构误差去做异常检测这条 ...

  2. 【VS开发】【C/C++开发】传递双重指针申请内存,典型用法

    传递双重指针申请内存,典型用法 指针参数是如何传递内存的? 如果函数的参数是一个指针,不要指望用该指针去申请动态内存.如下示例中,Test函数的语句GetMemory(str, 100)并没有使str ...

  3. freeRTOS学习8-20

  4. linux系统目录权限实践及结论

    总结测试结论:Linux目录的读.写.执行权限说明:

  5. Flutter与Xamarin跨平台移动开发相比

    在过去十年中,移动行业经历了巨大的增长,特别是在应用程序开发方面.据Statista报告称,全球智能手机用户超过20亿,预计到2022年底这一数字将增加到50亿以上.在这些智能手机中,近100%在三个 ...

  6. Intellj Idea 快捷键入门

    Intellj IDEA快捷键入门 时间: 2019/11/29 系统: Win10系统 版本 :Intellj Idea 2018.3 背景: 入手Intellj idea 两个月了,总结一下一些常 ...

  7. PAT B1014/A1061 福尔摩斯的约会(20)

    书中AC代码 #include <cstdio> #include <iostream> #include <cstring> using namespace st ...

  8. 黑科技——树剖两次dfs转一次dfs!

    黑科技--树剖两次\(dfs\)转一次\(dfs\)! 重所周知,树链剖分通常是要\(dfs​\)两次的,就像这样: int Fa[N],dep[N],Sz[N],son[N]; void dfs1( ...

  9. 1-N(1的总数)找规律

    见:https://blog.csdn.net/dormousenone/article/details/75208903 #define IOS ios_base::sync_with_stdio( ...

  10. 老贾的幸福生活day 04

    变量 变量名的规则: 变量名由字母,数字,下划线组成 变量名不能以数字开头 变量名要具有可描述性 变量名要区分大小写 变量名禁止使用python关键字 变量名不能使用中文和拼音 变量名推荐写法: 驼峰 ...