本文译自:http://developer.android.com/guide/topics/graphics/hardware-accel.html
从Android3.0(API Level 11)开始,Android 2D渲染管道能够更好的支持硬件加速。硬件加速执行的所有的绘图操作都是使用GPU在View对象的画布上来进行的。因为启用硬件加速会增加资源的需求,因此这样的应用会占用更多的内存。
启用硬件加速的最容易的方法是给整个应用程序都打开全局硬件加速功能。如果应用程序只使用标准的View和Drawable,那么打开全局硬件加速不会导致任何的不良的绘制效果。但是,因为硬件加速并不支持所有的2D图形绘制操作,所以对于那些使用定制的View和绘制调用的应用程序来说,打开全局硬件加速,可以会影响绘制效果。问题通常会出现在对那些不可见的元素进行了异常或错误的像素渲染。为了避免这种问题,Android提供以下级别,以便可选择性的启用或禁止硬件加速:
1. Application
2. Activity
3. Window
4. View
如果应用程序执行了定制化的绘图,就要在实际的带有硬件加速的硬件设备上测试,以便发现问题。
控制硬件加速
能够用以下级别来控制硬件加速
Application级别
在应用的Android清单文件中,把下列属性添加到<application>元素中,来开启整个应用程序的硬件加速。
<applicationandroid:hardwareAccelerated="true" ...>
Activity级别
如果应用程序不能够正确的使用被打开的全局硬件加速,那么也可以对Activity分别进行控制。在<activity>元素中使用android:hardwareAccelerated属性,能够启用或禁止Activity级别的硬件加速。以下示例启用全局的硬件加速,但却禁止了一个Activity的硬件加速:
<applicationandroid:hardwareAccelerated="true">
<activity .../>
<activityandroid:hardwareAccelerated="false"/>
</application>
Window级别
如果需要更细粒度的控制,就可以使用下列代码来针对给定的窗口来启用硬件加速:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
注意:当前不能在Window级别禁止硬件加速。
View级别
能够使用下列代码在运行时针对一个独立的View对象来禁止硬件加速:
myView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
注意:当前不能在View级别开启硬件加速。View层除了禁止硬件加速以外,还有其他的功能,更多的相关信息请看本文的“View层”。