Android 控制硬件加速hardwareAccelerated的说明

    从Android3.0 (API level 11)开始,Android的2D显示管道被被设计得更加支持硬加速了.硬加速使用GPU承担了全部在View的canvas上执行的绘制操做.android

  启用硬加速最简单的的方法是对整个应用启用硬件速.若是你的应用只使用标准的view和Drawable,全局启用硬加速将不会带来任何负面影响.然而,由于硬加速不是被全部的2D绘制所支持,因此启用它时可能对你的自定义绘制产生影响.出现的问题常常是不可见的,也多是异常,或错误地显示了像素.为了不这些问题,Android提供了在如下各级别上启用或禁止硬加速的能力:canvas

Application缓存

Activityapp

Window测试

Viewspa

  若是你的应用使用了自定义绘制,须要在真实的设备上启用硬加速进行测试来找出问题."不支持的绘制操做"一节描述了已知的不能被硬加速的绘制操做以及如何避开它们.设计

 

 

控制硬加速get

  你能够在如下级别上分别控制硬加速:it

Applicationio

Activity

Window

View

 

Application级
  在你的manifest文件中,把如下属性添加到<application>标签来对你的整个应用启用硬加速:

<applicationandroid:hardwareAccelerated="true" ...>

Activity级
  若是你的应用在全局启用硬加速时行为不正确,你能够对个别activities单独启用硬加速.欲在actvity级别启用或禁止硬加速,你能够对<activity>元素使用android:hardwareAccelerated属性.下面的例子在整个应用中启用了硬加速但对一个activity禁止了硬加速:

<applicationandroid:hardwareAccelerated="true">

<activity... />

<activityandroid:hardwareAccelerated="false" />

</application>

Window级
  若是你须要更高颗粒度的控制,你可使用如下代码为一个window启用硬加速:

getWindow().setFlags(

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

 

 

注:如今你还不能在window级别禁止硬加速.

 


Viewlevel

你能够在运行时使用如下代码禁止个别的View的硬加速:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

 


注:当前你不能在View级别启用硬加速.View层有除禁止硬加速以外的其它功能.

 

 

断定一个View是否能被硬加速

  有时一个应用了解是否启用了硬件速是颇有用的,对那些自定义View之类的东西尤为重要.在你的应用作了一些不被最新的管线所支持的自定义绘制时这更加剧要.

 

  有两种方法能够检查应用是否被硬加速:

View.isHardwareAccelerated():若是View附加到一个硬加速的window上就返回true.

Canvas.isHardwareAccelerated():若是Canvas被硬加速了就返回true.

 

  若是你必须在你的绘制代码中作这个,应使用Canvas.isHardwareAccelerated()而不是View.isHardwareAccelerated().当一个view附加到一个硬加速的window上,它仍可使用非硬件速的Canvas进行绘制操做.好比当为了高速缓存而把一个view画到一个bitmap中.

相关文章
相关标签/搜索