Android从3.0(APILevel11)开始,在绘制View的时候支持硬件加速,充分利用GPU的特性,使得绘制更加平滑,但是会多消耗一些内存。

开启或关闭硬件加速:

由于硬件加速自身并非完美无缺,所以Android提供选项来打开或者关闭硬件加速,默认是关闭。可以在4个级别上打开或者关闭硬件加速:

Application级别:<applicationandroid:hardwareAccelerated="true"...>

Activity级别:<activityandroid:hardwareAccelerated="false"...>

Window级别:

getWindow().setFlags(    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

注意:目前为止,Android还不支持在Window级别关闭硬件加速。

View级别:

myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

注意:目前为止,Android还不支持在View级别开启硬件加速。

检测当前是否启用了硬件加速

复制代码
// 方法一// 此方法返回true,如果myView挂在一个开启了硬件加速的Window之下,// 也就是说,它在绘制的时候不一定使用了硬件加速,getDrawingCachemyView.isHardwareAccelerated();                        // 方法二// 返回true,如果canvas在绘制的时候启用了硬件加速// 尽量采用此方法来判断是否开启了硬件加速canvas.isHardwareAccelerated();
复制代码

理解View的绘制模型:

1.没有硬件加速:invalidate the view hierarchy ------> draw the view hierarchy

2.有硬件加速:invalidate the view hierarchy ------> record and update the display list ------> draw the display list

硬件加速的限制:

目前,Android对硬件加速的支持并非完美,有些绘制操作在开启硬件加速的情况下不能正常工作(具体的列表可以参考Android开发者文档)。

不过Android可以保证内置的组件和应用支持硬件加速。因此,如果应用中只使用了标准UI组件,可以放心开启硬件加速。

随着Android的版本升级,相信一段时间之后,硬件加速可以得到完美的支持。

开启硬件加速之后的异常反应:

1.某些UI元素没有显示:可能是没有调用invalidate

2.某些UI元素没有更新:可能是没有调用invalidate

3.绘制不正确:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作

4.抛出异常:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作

本文基本上是按照Android开发者文档来写的,具体细节可以参考这里http://developer.android.com/guide/topics/graphics/hardware-accel.html

更多相关文章

  1. android Kotlin 继承、派生、接口、构造方式,方法、属性重写
  2. android操作sdcard中的多媒体文件(一)——音乐列表的制作
  3. Android实现计时与倒计时(限时抢购)的几种方法
  4. android 操作sdcard中的多媒体文件(一)——音乐列表的制作
  5. Android自定义View的实现方法,带你一步步深入了解View(三) 。
  6. 【移动开发】Android中图片过大造成内存溢出,OOM(OutOfMemory)异常
  7. Android 超简单的录制屏幕视频及生成GIF文件的方法

随机推荐

  1. Android视频播放项目总结之 使用Android
  2. android editview与popwindow焦点冲突
  3. android Bitmap getByteCount和getRowByt
  4. android 比较精简的list对话框代码
  5. 关于用eclipse开发android经常出现R异常
  6. android signed apk
  7. Android 获取JSP或ASP的sessionId(Cookie)
  8. android assets 的说明与应用
  9. Binder系列7—framework层分析
  10. Android Retrofit 笔记之一使用拦截器设