Android硬件加速小结

原创 2018年04月15日 23:07:16

前言

Android从3.0版本开始加入了硬件加速,这样就能够充分利用手机硬件GPU来提升界面的渲染效果。但是这种技术还有一些限制,比如有些开启了硬件加速的界面上无法使用Canvas的clipPath接口,一点调用就会抛出不支持的异常。现在来对硬件加速的小知识点做一些总结。

开启/关闭硬件加速

在硬件加速的开启/关闭可以分成四种层次上做。最高的层次就是在整个应用里开启或关闭硬件加速,只需要在AndroidManifest文件动application标签里定义android:hardwareAccelerated属性就可以了。

<application 
android:hardwareAccelerated="true"
....  
>  

第二层就是Activity,第三层是Window。Activity的打开/关闭硬件加速也是在Activity注册的时候android:hardwareAccelerated属性定义的。刚开始接触的时候还觉得Activity和Window不是一回事吗,为什么要分成两个层次呢?其实了解Android底层的Window类型就会明白Activity是应用窗口类型,Dialog属于子窗口类型,子窗口类型一定要附加在应用窗口类型上才能存活,也就是Activity代表了它自己和内部的所有子窗口,而Window只代表一个窗口。比如Activity的应用窗口不支持硬件加速,而它打开的一个对话框需要做复杂的动画效果,这时候可以只对这个对话框打开硬件加速。它们二者只有Activity可打开也可以关闭硬件加速,而Window类型的只能打开硬件加速功能。

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

最后一种就是视图View对象了,View通常都是放在Window里面的,Window只能开启硬件加速,而View就只能关闭硬件加速了。比如在View中执行canvas.clipPath来实现圆角矩形操作,但是有些手机上就会出现硬件加速不支持,但是整个界面又要做复杂动画效果需要开始硬件加速,可以只对当前的View关闭硬件加速效果。

setLayerType(View.LAYER_TYPE_SOFTWARE, null);  
// canvas.clipPath();

不支持操作

硬件加速在开启的情况下很容易与Canvas和paint的一些配置不兼容,最常见的就是抛出不支持异常。笔者在开发过程中曾经碰到过在有些国产机上出现崩溃,但是公司的测试机不包含这种手机导致线上崩溃。如果有人在开启硬件加速的页面使用一下的接口,注意要加上try..catch代码防止出现问题。

Canvas不支持硬件加速的二维绘图接口:
- clipPath()
- clipRegion()
- drawPicture()
- drawPosText()
- drawTextOnPath()
- drawVertices()

Paint不支持硬件加速的接口:
- setLinearText()
- setMaskFilter()
- setRasterizer()

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xingzhong128/article/details/79954888

谈谈android的硬件加速

从Android 3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速。使用GPU的View在Canvas上进行画的操作时都会使用硬件加速。在最新的Android版本里,图形硬件加...
  • fishmai
  • fishmai
  • 2016-09-01 12:55:34
  • 2344

Android应用开发:图形绘制之硬件加速

引言 在Android3.0后,Android的2D渲染通道开始支持硬件加速,也就是说所有View的Canvas绘画动作都会使用GPU,同时也代表着应用程序会损耗更多的内存。而在Androi...
  • airk000
  • airk000
  • 2014-08-29 15:07:24
  • 7303

关于Android上面配置硬件加速的问题

转载时请注明出处和作者联系方式: http://mogoweb.net mogoweb@gmail.com 本文的主要内容来自SDK文章的"Hardware Acceleration”. ...
  • u011068996
  • u011068996
  • 2015-03-04 14:34:58
  • 1738

Android 开启或关闭硬件加速

开启硬件加速:在Android中,可以四给不同层次上开启硬件加速: 1、应用: 2、Activity 3、Window getWindow(...
  • qq_26761229
  • qq_26761229
  • 2016-09-20 16:31:14
  • 7037

Android自定义view之硬件加速

什么是硬件加速##我们都知道手机里面的GPU是专门处理设备图形的中央处理器,android中view图形的绘制,需要渲染,图形变换,游戏就是view不断变换图形的过程,在自定义view或者考虑使用硬件...
  • u010129985
  • u010129985
  • 2016-10-17 10:31:27
  • 1549

Android如何关闭硬件加速

 原文地址:http://developer.android.com/guide/topics/graphics/hardware-accel.html 译文地址:http://blog.ch...
  • yq6073025
  • yq6073025
  • 2016-11-24 14:06:23
  • 5966

Android 打开关闭硬件加速

尊重原创,原文出处:http://www.cnblogs.com/frydsh/archive/2012/10/23/2733581.html       Android从3.0(API Level...
  • hnulwt
  • hnulwt
  • 2015-01-15 15:59:02
  • 3142

关于Android硬件加速技术分析

从Android3.0(API Level 11)开始,支持硬件加速,可充分利用GPU的特性,使得界面渲染更加平滑,但是会消耗更多内存RAM。 但是硬件加速自身并非完美,在某些Android5的ro...
  • coloriy
  • coloriy
  • 2017-07-05 11:56:49
  • 705

Android-动画绘制2D绘制和硬件加速的不支持问题

前言好久没写博客了,现在都是一个月才写一些,也是因为自己没什么料,技术仍然有待提高问题描述canvas是我们常用的功能,我们经常在canvas画布上绘制各种自己想要的效果。今天分享一个自己在调用can...
  • z82367825
  • z82367825
  • 2016-11-18 11:25:04
  • 1054

Android硬件加速原理与实现简介

在手机客户端尤其是Android应用的开发过程中,我们经常会接触到“硬件加速”这个词。由于操作系统对底层软硬件封装非常完善,上层软件开发者往往对硬件加速的底层原理了解很少,也不清楚了解底层原理的意义,...
  • u011403718
  • u011403718
  • 2017-01-20 13:48:26
  • 3657
收藏助手
不良信息举报
您举报文章:Android硬件加速小结
举报原因:
原因补充:

(最多只允许输入30个字)