根底知识

CPU: 中央处理器,它集成了运算,缓冲,操控等单元,包含绘图功能.CPU将目标处理为多维图形,纹路(Bitmaps、Drawables等都是一起打包到统一的纹路)。

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

OpenGL ES:是手持嵌入式设备的3DAPI,跨平台的、功能完善的2D和3D图形使用程序接口API,有一套固定烘托管线流程. OpenGL ES详解

DisplayList 在Android把XML布局文件转换成GPU能够识别并制作的目标。这个操作是在DisplayList的协助下完结的。DisplayList持有一切即将交给GPU制作到屏幕上的数据信息。

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

笔直同步VSYNC:让显卡的运算和显现器刷新率一致以稳定输出的画面质量。它奉告GPU在载入新帧之前,要等候屏幕制作完结前一帧。下面的三张图分别是GPU和硬件同步所产生的状况,Refresh Rate:屏幕一秒内刷新屏幕的次数,由硬件决议,例如60Hz.而Frame Rate:GPU一秒制作操作的帧数,单位是30fps,正常状况过程图如下:

Android 渲染机制【深度解剖学习】

烘托机制剖析

烘托流程简介

Android全体的制作流程如下: UI目标—->CPU处理为多维图形,纹路 —–经过OpeGL ES接口调用GPU—-> GPU对图进行光栅化(Frame Rate ) —->硬件时钟(Refresh Rate)—-笔直同步—->投射到屏幕

Android 渲染机制【深度解剖学习】

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

烘托时刻线

Android 渲染机制【深度解剖学习】

Android 渲染机制【深度解剖学习】

正常状况下Android的GPU会在16ms完结页面的制作,如果一帧画面烘托时刻超过16ms的时分,笔直同步机制会让显现器硬件 等候GPU完结栅格化烘托操作,然后再次制作界面,这样就会看起来画面停顿。

当GPU烘托速度过慢,就会导致如下状况,某些帧显现的画面内容就会与上一帧的画面相同。

Android 渲染机制【深度解剖学习】

烘托常见问题

GPU过度制作

OverDraw是开发中常见的优化点,是指一个界面出现层层制作的状况,如:

Android 渲染机制【深度解剖学习】

咱们能够使用一些第三方东西来检查是否过渡制作。如小米魅族。

Android 渲染机制【深度解剖学习】

任何时分View中的制作内容产生变化时,都会从头履行创立DisplayList,烘托DisplayList,更新到屏幕上等一 系列操作。这个流程的体现功能取决于你的View的杂乱程度,View的状况变化以及烘托管道的履行功能。

当View的大小产生改变,DisplayList就会从头创立,然后再烘托,而当View产生位移,则DisplayList不会从头创立,而是履行从头烘托的操作。 所以当界面过于杂乱的时分,DisplayList制作界面就会出现推迟而形成卡顿。

咱们能够使用烘托东西检测,东西中,不同手机出现方法或许会有不同.分别关于StatusBar,NavBar,激活的程序Activity区域的GPU Rending信息。激活的程序Activity区域的GPU Rending信息。

咱们打开手机的GPU Rending出现的信息,咱们以魅族为例:

Android 渲染机制【深度解剖学习】

Android 渲染机制【深度解剖学习】

阐明:每一条柱状线都包含三部分, 蓝色代表测量制作Display List的时刻, 赤色代表OpenGL烘托Display List所需求的时刻, 黄色代表CPU等候GPU处理的时刻。

Android烘托优化

读懂Android的烘托机制关于优化,特别是在写布局的时分是很有协助的。削减布局层级,削减GPU的烘托这对咱们供给app的质量是很有协助的。

去掉不必要的界面:

Android 渲染机制【深度解剖学习】

布局层级优化

Android 渲染机制【深度解剖学习】

当然Android在某些体系版别也增加了检测overdraw的东西。如Android 在4。2版别中增加了Debug GPU Overdraw选项,如果你用的是Jelly Bean 4.3 或许 KitKat 设备,在屏幕的左下角会有一个计数展示屏幕overdraw的程度。

另一种检查overdraw的方法是在Debug GPU overdraw菜单里挑选“Show Overdraw areas”选项。挑选之后,会在app的不同区域覆盖不同的色彩来表示overdraw的次数。比较屏幕上这些不同的色彩,能够快速方便的定位overdraw问题。

图片格局挑选

Android的界面能用png最好是用png了,由于32位的png色彩过渡滑润且支持通明。jpg是像素化压缩过的图片,质量已经下降了,再拿来做9path的按钮和平铺拉伸的控件必定不忍目睹,要尽量避免。有条件的能够挑选webpp,这种格局的图片占据的大小比较小,并且能满足手机显现的需求。

当布景无法避免,尽量用Color.TRANSPARENT

由于通明色Color.TRANSPARENT是不会被烘托的,他是通明的。 所以咱们在设置界面的时分需求做一个判断:

Bean bean=list.get(i);
 if (bean.img == 0) {
            Picasso.with(getContext()).load(android.R.color.transparent).into(holder.imageView);
            holder.imageView.setBackgroundColor(bean.backPic);
        } else {
            Picasso.with(getContext()).load(bean.img).into(holder.imageView);
            holder.imageView.setBackgroundColor(Color.TRANSPARENT);
        }   

烘托在Android开发中占很重要的位置,这里深化的学习了一下。 更多Android开发技术问题,能够前往以下链接:

传送直达↓↓↓ :www.6hu.cc/go//?target=htt…

文末

深化了解Android烘托机制,主要内容包含根底知识、烘托机制剖析、烘托常见问题、Android烘托优化、基本概念、根底使用、原理机制和需求留意的事项等,并结合实例方式剖析了其使用技巧,希望经过本文能协助到大家了解使用这部分内容。