01硬件与软件加速基础
【 硬件加速简介 】
提及硬件加速,软件加速同样不容忽视。在阐述这两种技术之前,有必要先明确它们的含义。
硬件加速就是计算任务委托给专用硬件执行,以此提升安卓系统的图形输出效能。详细来讲,界面渲染工作由图形处理器负责。硬件加速本质上就是把部分运算工作分配给专用硬件承担,借此降低中央处理器的负荷,并加快运算速率。在安卓平台中,硬件加速就是让GPU承担视图的渲染工作。具体表现为,把Canvas里的绘制指令,比如drawXXX这类,转变成真正的图像处理。
【 硬件加速与软件加速的区别 】
那么,硬件加速运作方式是怎样的呢?硬件加速若未被启用,Canvas会将绘制成果载入Bitmap,在后续的显示环节直接以Bitmap的像素信息实施屏幕显示。此环节的运算任务主要由CPU承担。硬件加速一旦启动,Canvas会记录下所有的绘制指令,并将这些指令委托给GPU来实施,借此提升显示效率。
不仅如此,我们要明白硬件加速借助GPU完成绘图工作,而软件加速则由CPU负责执行。并非所有绘图动作都能采用硬件加速。
【 硬件加速的历史与默认状态 】
安卓设备使用者或许还在意设备加速的初始设置状态,安卓系统从3.0版本起开始应用设备加速,到了4.0版本之后,这项功能就自动启动了,如今大多数系统版本都是这样设置的,具体来说,设备加速功能是从安卓3.0以及API 11版本起开始使用的,而到了安卓4.0和API 14版本之后,这项功能就自动激活了如今搭载Android4.4及以下系统的手机已不多见,由此可以推断后续推出的Android设备普遍具备硬件加速的预设设置。
02Android中硬件加速的运用
【 Application与Activity的设置 】
最终,我们还要明白硬件加速的作用区域。它从软件应用层面起,慢慢波及到界面活动、窗口显示和视图显示等层面。在配置清单文件里,借助android:hardwareAccelerated参数可以启用硬件加速,从而作用于整个程序及其构成部分。在应用层面,我们借助相关设定来决定是否运用硬件加速功能。具体来说,可以在安卓系统中的安卓清单文件,也就是AndroidManifest.xml,里面找到application这个元素,通过给它添加android:hardwareAccelerated这个特性来开启或者禁用硬件加速这个选项。详细说明,设定这个特性为肯定就能启动物理加速,而设定为否定就代表停用。
【 Window与View中的设置与影响 】
另外,在Activity里也能应用硬件加速功能,这个操作方式跟在Application中的使用方法是一样的。只要在activity标签里加上android:hardwareAccelerated属性,并且设定为"true"。这个操作会决定这个Activity是不是用硬件加速来执行绘图任务。
在视图里,能够借助setLayerType方法来管理硬件加速功能,若想开启硬件加速,可以选用LAYER_TYPE_HARDWARE这个选项。具体而言,使用setLayerType函数并传入View.LAYER_TYPE_HARDWARE参数及mPaint对象,能够启动硬件加速功能;相反,若传入View.LAYER_TYPE_SOFTWARE参数及mPaint对象,则意味着关闭硬件加速。
【 自定义绘制方法与硬件加速 】
第三,一般情况下,比如在onDraw(Canvas canvas)方法里,我们会先调用super.onDraw(canvas)去完成父类的绘制功能。在onDraw中,要恰当运用super.onDraw和自定义方法来提升效率,这个表现会受到硬件加速配置的影响。然后,能够运用canvas的drawLine之类的功能,完成个性化的图形绘制。
03硬件加速的限制与注意事项
【 方法限制 】
启用设备加速后,部分Canvas函数可能无法使用或运行不正常。比如,在加速模式下,一些Canvas函数会失效,比如drawBitmapMesh函数在18版本以后不再支持硬件加速。如果需要使用这个函数,就必须关闭设备加速。