1、什么是GPU,主要用来做什么?
Graphics Processing Unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。
显卡的处理器称为图形处理器(GPU),它是显卡的“心脏”,与CPU类似,只不过GPU是专为执行复杂的数学和几何计算而设计的,这些计算是图形渲染所必需的。某些最快速的GPU集成的晶体管数甚至超过了普通CPU。
GPU会产生大量热量,所以它的上方通常安装有散热器或风扇。
2、什么是CPU,主要用来做什么?
解释:*处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
功能:处理指令、执行操作、控制时间、处理时间
CPU过高带来的影响:可能会使整个手机无法响应,整体性能降低,引起ANR,导致手机更耗电,降低用户体验等。
3、什么是离屏渲染?什么是屏幕渲染?他俩的区别?
GPU的屏幕渲染机制如下有2种
屏幕渲染:指的是GPU的渲染操作时在当前用于显示的屏幕缓冲区进行
离屏渲染:指的是GPU在当前屏幕缓冲区以外开辟一个缓冲区进行渲染操作
如下操作将会触发离屏渲染:
光栅化:将图转化为一个个栅格组成的图像,特点:每个元素对应帧缓冲区的一像素
遮罩、阴影、边缘抗锯齿、不透明、复杂形状设置圆角等、渐变、文本
4、电量对性能产生的影响?
常见的耗电场景:定位,尤其是调用GPS定位
网络传输,尤其是非wifi环境
屏幕亮度
CPU帧率
内存调度评率
wake_locker 时间和次数
其他传感器
耗电的主要因素:屏幕的渲染、CPU的运行
电量的优化:内存优化、渲染优化、计算优化的时候其实也已经在做电量优化了
5、流量对性能的影响?
解释:我们手机通过运营商的网络访问Internet,运营商替我们的手机转发数据报文,数据报文的总大小(字节数)即流量,数据报文是包含手机上下行的报文。
6、内存对性能的影响?
主要分为:内存泄漏、垃圾回收、内存指标
(1)内存泄漏
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。通俗点讲,在大部分应用中,会有一类功能是需要加载附加资源的,比如显示从网络下载的文本或图片。这类功能往往需要在内存中存放要使用的资源对象,退出该功能后,就需要将这些资源对象清空。如果忘了清理,或者是代码原因造成的清理无效,就会形成内存泄漏。
(2)垃圾回收
操作系统。这样以来,时间久了当程序运行的时候就会产生很多垃圾,一方面浪费了不少内存空间,另一方面如果同一个内存地址被删除两次的话,程序就会不稳定,甚至奔溃。
(3)内存指标
内存指标有:VSS、RSS、PSS、USS,他们分别的含义是:
VSS:Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS:Resident Set Size实际使用物理内存(包含共享库占用的内存)
PSS:Proportional Set Size实际使用的物理内存(按照比例分配共享库占用的内存)
USS:Unique Set Size进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS,一般测试中关注的比较多的是RSS这个指标。
7、帧率(丢帧)【卡顿慢的直接原因】
即Frame Rate,单位fps,是指GPU生成帧的速率,如30fps,60fps。
用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能,从设计师的角度,他们希望APP能够有更多的动画、图片等时尚元素来实现流畅的用户体验,但是android系统很有可能无法及时完成那些复杂的界面渲染操作,Android系统每隔16s发出VSYNC信号,出发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需的60fps,为了能够实现60fps,这意味程序的大多数操作都必须在16ms内完成,时间超出16ms越多,丢的帧越多。
比如:你的某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常渲染,这样就发生了丢帧现象,那么用户在32s内看到的会是同一帧画面。
容易发生丢帧现象的地方:
UI执行动画
滑动listview
或许是layout太过复杂(可用hierarchyviewer来查看页面布局结构,建议尽量用简单的布局),无法在16ms内完成渲染
UI上有层叠太多的绘制单元
动画执行的次数过多
如上都会导致CPU或者GPU负载过重
8、为什么帧率要选择60fps??
原因:因为人眼和大脑之间的协作无法感知超过60fps的画面更新(60fps是最好的效果)
12fps大概类似手动快速翻动书籍的帧率。这明显是可以感知到不厚顺滑的,24fps使得人眼感知的是连续性的波动,这其实是归功于运动模糊的效果,24fps是电影胶圈通常使用的帧率,因为这个帧率足够支撑大部分电影画面需要表达的内容,同时能够最大的减少费用支出,但是低于30fps是无法顺畅表现绚丽的画面内容的,此时就需要用到60fps来达到想要的效果,超过60fps是没有必要的。
开发app的性能目标就是保持60fps(低一些亦不会影响用户体验),这意味着每一帧你只有 16ms = 1000 / 60 的时间来处理所有的任务(不能超出太多,例如:大于32ms时就该优化了)
9、什么是VSYNC(理解VSYNC)?
VSYNC:垂直同步
10、什么是流畅度?
VSYNC机制像是一台转速固定的发送机(60转/s),它每一转带动着去做一些UI相关的事情,但是不是每一转都会有工作去做(就像有时在空挡,有时在D档),有时候因为各种阻力某一圈工作量比较重超过了16.6ms,那么这台发动机这秒内就不是60转了,当然也有可能被其他因素影响,比如给油不足(主线程干的活太多)等等,就会出现转速降低的状况,我们把这个转速叫做流畅度。
作者:Syw