Android异常与性能优化相关面试问题-ui卡顿面试问题详解
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卡顿面试问题详解的更多相关文章
- Android异常与性能优化相关面试问题-OOM异常面试问题详解
什么是OOM? 当前占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出Out Of Memory异常. 一些容易混淆的概念: 内存溢出:指的就是OOM. 内存抖动:是短时间 ...
- Android异常与性能优化相关面试问题-其他优化面试问题详解
Android不用静态变量存储数据: 静态变量等数据由于进程已经被杀死而被初始化.在Android中应用进程不是安全的,因为它会有系统给kill掉,但是在实际中可能会有这样的一个假象:当app被杀掉之 ...
- Android异常与性能优化相关面试问题-内存管理面试问题详解
内存管理机制概述: 分配机制:操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能够正常的运行,不至于内存不够使用,或者某个进程占用过多的内存. 回收机制:在系统内存不足的时候,系统有一 ...
- Android异常与性能优化相关面试问题-冷启动优化面试问题详解
什么是冷启动: 冷启动的定义:冷启动就是在启动应用前,系统中没有该应用的任何进程信息.实际也就是要执行Application.onCreate()方法的那次启动. 冷启动 / 热启动的区别:热启动:用 ...
- Android异常与性能优化相关面试问题-内存泄漏面试问题讲解
Java内存泄漏基础知识: Java的内存的分配策略 a.静态存储区:也叫方法区,主要是存放一些静态数据及全局变量等,在程序编译时就已经分配好了,并且在静态存储区中存放的变量在整个程序运行期间都存在. ...
- Android异常与性能优化相关面试问题-ANR异常面试问题详解
什么是ANR? Application Not Responding 造成ANR的主要原因: 应用程序的响应性是由ActivityManager和WindowManager系统服务监视的,当监视到在A ...
- Android异常与性能优化相关面试问题-bitmap面试问题详解
recycle: 对于Bitmap来说内存分为Java内存和Native内存,而当图片不用时建议调用一下recycle()方法来将native层的内存进行回收,下面看一下它的源码官方对它的解释: LR ...
- css3动画的性能优化_针对移动端卡顿问题
这篇文章主要讲的是怎样制作流畅动画,特别是针对移动端.在这里我首先介绍制作动画的几种方法的优缺点:接着会着重介绍用css3制作动画的注意事项. 资源网站大全 https://55wd.com 设计导航 ...
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
随机推荐
- centos7 httpd配置
centos7 httpd配置 标签(空格分隔): 未分类 隐藏server信息 修改httpd.conf 设置,添加如下两行 ServerSignature Off ServerTokens Pro ...
- VS2019 安装并破解 DevExpress 19.2 插件
0.写在最前 本人vs版本为: 1.下载DevExpress 最新版本插件程序 官网下载试用30天地址: https://www.devexpress.com/products/net/con ...
- 前端控制台 JavaScript函数报错 SyntaxError: expected expression, got ';' SyntaxError: expected expression, got 'if'
在火狐浏览器下调试时, 页面报错SyntaxError: expected expression, got ';'或者SyntaxError: expected expression, got 'if ...
- RDP爆破方式攻击防控思路梳理
- [计蒜客T2238]礼物_线段树_归并排序_概率期望
礼物 题目大意: 数据范围: 题解: 这题有意思啊($md$卡常 直接做怎么做? 随便上个什么东西,维护一下矩阵乘和插入,比如说常数还算小的$KD-Tree$(反正我是没见人过过 我们漏掉了一个条件, ...
- 小记--------sqoop的简单从mysql导入到hbase操作
sqoop import -D sqoop.hbase.add.row.key=true //是否将rowkey相关字段列入列族中,默认为false :该 ...
- 状压DP--Rotate Columns (hard version)-- Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)
题意:https://codeforc.es/problemset/problem/1209/E2 给你一个n(1-12)行m(1-2000)列的矩阵,每一列都可以上下循环移动(类似密码锁). 问你移 ...
- Mysql 三大特性详解
Mysql 三大特性详解 Mysql Innodb后台线程 工作方式 首先Mysql进程模型是单进程多线程的.所以我们通过ps查找mysqld进程是只有一个. 体系架构 InnoDB存储引擎的架构如下 ...
- Annotation Type ManyToMany->>>>>Oracle
Example 1: // In Customer class: @ManyToMany @JoinTable(name="CUST_PHONES") public Set< ...
- CentOS7-部署kubernetes
1 环境准备 节点 主机名 IP OS Master k8s-master 192.168.57.1 centos 7 Node1 k8s-nod ...