Android应用中是如何进行渲染的

  

Android应用中是如何进行渲染的?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<>强基础知识

<强> CPU :中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理为多维图形,纹理(位图、画板等都是一起打包到统一的纹理)。

<强> GPU :一个类似于CPU的专门用来处理图形的处理器,作用用来帮助加快格栅化操作,当然,也有相应的缓存数据(例如缓存已经光栅化过的位图等)机制。

<强> OpenGL ES :是手持嵌入式设备的3 dapi,跨平台的,功能完善的2 d和3 d图形应用程序接口API,有一套固定渲染管线流程。OpenGL ES详解

<强> DisplayList 在Android把XML布局文件转换成GPU能够识别并绘制的对象。这个操作是在DisplayList的帮助下完成的.DisplayList持有所有将要交给GPU绘制到屏幕上的数据信息。

<强>格栅化是将图片等矢量资源,转化为一格格像素点的像素图,显示到屏幕上。

<强>垂直同步VSYNC :让显卡的运算和显示器刷新率一致以稳定输出的画面质量。它告知GPU在载入新帧之前,要等待屏幕绘制完成前一帧。下面的三张图分别是GPU和硬件同步所发生的情况,刷新率:屏幕一秒内刷新屏幕的次数,由硬件决定,例如60赫兹。而帧率:GPU一秒绘制操作的帧数,单位是30 fps,正常情况过程图如下:
 Android应用中是如何进行渲染的

<强>渲染机制分析渲染流程简介

Android整体的绘制流程如下:

UI对象,在CPU处理为多维图形,纹理,通过OpeGL ES接口调用GPU——比;GPU对图进行光栅化(帧率)——在硬件时钟(刷新率)——垂直同步——在投射到屏幕

 Android应用中是如何进行渲染的

Android系统每隔16发女士出VSYNC信号60=16.66 (1000 ms/ms),触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60 fps,为了能够实现60 fps,这意味着计算渲染的大多数操作都必须在16毫秒内完成。

渲染时间线

 Android应用中是如何进行渲染的

 Android应用中是如何进行渲染的

正常情况下安卓的GPU会在16女士完成页面的绘制,如果一帧画面渲染时间超过16女士的时候,垂直同步机制会让显示器硬件等待GPU完成栅格化渲染操作,然后再次绘制界面,这样就会看起来画面停顿。

当GPU渲染速度过慢,就会导致如下情况,某些帧显示的画面内容就会与上一帧的画面相同。

 Android应用中是如何进行渲染的

<强>渲染常见问题

GPU过度绘制

透支是开发中常见的优化点,是指一个界面出现层层绘制的情况,如:
 Android应用中是如何进行渲染的

我们可以使用一些第三方工具来查看是否过渡绘制。如小米魅族。

 Android应用中是如何进行渲染的

任何时候视图中的绘制内容发生变化时,都会重新执行创建DisplayList,渲染DisplayList,更新到屏幕上等一系列操作。这个流程的表现性能取决于你的视图的复杂程度,视图的状态变化以及渲染管道的执行性能。

当视图的大小发生改变,DisplayList就会重新创建,然后再渲染,而当视图发生位移,则DisplayList不会重新创建,而是执行重新渲染的操作。

所以当界面过于复杂的时候,DisplayList绘制界面就会出现延迟而造成卡顿。

我们可以使用渲染工具检测,工具中,不同手机呈现方式可能会有差别。分别关于状态栏、导航条、激活的程序活动区域的GPU渲染信息。激活的程序活动区域的GPU渲染信息。

我们打开手机的GPU渲染呈现的信息,我们以魅族为例:
 Android应用中是如何进行渲染的

 Android应用中是如何进行渲染的

Android应用中是如何进行渲染的