从Android3.0 (API level11)开始,Android的2D显示管道被被设计得更加支持硬加速了.硬加速使用GPU承担了所有在View的canvas上执行的绘制操作.
启用硬加速最简单的的方法是对整个应用启用硬件速.如果你的应用只使用标准的view和Drawable,全局启用硬加速将不会带来任何负面影响.然而,因为硬加速不是被所有的2D绘制所支持,所以启用它时可能对你的自定义绘制产生影响.出现的问题经常是不可见的,也可能是异常,或错误地显示了像素.为了避免这些问题,Android提供了在以下各级别上启用或禁止硬加速的能力:
Application
Activity
Window
View
如果你的应用使用了自定义绘制,需要在真实的设备上启用硬加速进行测试来找出问题."不支持的绘制操作"一节描述了已知的不能被硬加速的绘制操作以及如何避开它们.
控制硬加速
你可以在以下级别上分别控制硬加速:
Application
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之类的东西尤其重要.在你的应用做了一些不被最新的管线所支持的自定义绘制时这更加重要.
有两种方法可以检查应用是否被硬加速:
如果你必须在你的绘制代码中做这个,应使用Canvas.isHardwareAccelerated()而不是View.isHardwareAccelerated().当一个view附加到一个硬加速的window上,它仍可以使用非硬件速的Canvas进行绘制操作.比如当为了高速缓存而把一个view画到一个bitmap中.
分享到:
相关推荐
2. **最佳实践**:NativeSFDemo遵循了Android图形开发的最佳实践,包括使用适当的缓存策略、避免过度绘制以及合理调度渲染任务。 3. **兼容性测试**:虽然NativeSFDemo主要展示了Android 12的新特性,但开发者也...
《Android系统原理与开发要点详解》是一份深入探讨Android系统的培训课件,涵盖了从系统概述到具体组件的全面解析。这份资料旨在帮助开发者理解和掌握Android系统的核心机制,从而提升开发效率和应用质量。 1. **...
- 图形系统基础:介绍Android图形系统的基础架构,包括硬件加速、OpenGL ES、SurfaceFlinger等关键组件。 - UI渲染流程:详细讲解Android应用程序UI的绘制过程,从布局解析到屏幕显示的完整链路。 - 动画与过渡:...
### Android系统原理与开发要点详解:开发综述 #### 第一部分:Android的系统架构 **1.1 软件结构** Android系统架构分为四个主要层次: 1. **操作系统层**(Linux,相关驱动):这是Android的核心层,依赖于...
《深入理解Android》是邓凡平先生所著的一套关于Android开发的权威指南,分为卷I和卷II,这两部著作对于深入理解Android系统的工作原理和框架设计具有极高的参考价值。书中涵盖了从基础概念到高级技术的广泛内容,...
《SmartGL:构建Android游戏与应用的图形引擎详解》 在Android应用开发中,图形引擎是构建游戏和复杂视觉效果的核心工具。SmartGL就是这样一款专为Android平台设计的图形引擎,它基于强大的OpenGL标准,旨在简化2D...
### Android图形系统详解 #### 一、概述 在深入探讨Android图形系统之前,我们首先需要了解Binder IPC(Inter-Process Communication)的基本概念及其在Android系统中的应用。因为Android图形系统高度依赖于Binder...
在Android开发中,属性系统是构建用户界面和控制应用程序外观与行为的核心部分。这份"android 属性汇总.rar"文件很可能是包含了一份详细的Android XML属性清单,涵盖了从布局到视图,从主题到动画的各种属性。这里,...
这本书涵盖了Android系统的各个方面,包括系统架构、进程管理、内存管理、图形系统、安全模型等多个关键领域,是学习Android开发不可或缺的知识宝库。 1. **Android系统架构**:Android系统基于Linux内核,它采用了...
本书针对Java开发者,详细解读了Android系统的各个方面,包括系统架构、进程管理、内存管理、图形系统、网络通信等多个核心模块。通过阅读本书,开发者能够提升对Android平台的深层认知,从而更高效地进行应用开发。...
第十五章《Android内核驱动——杂项》:涵盖了Android内核驱动的其他重要方面,可能包括输入设备驱动、网络驱动、图形硬件加速等,这些内容对于系统级优化和设备适配至关重要。 通过对以上各章节的学习,开发者不仅...
5. **硬件加速**:探讨OpenGL ES图形库和硬件加速在Android中的应用,以及游戏开发的相关技术。 6. **性能优化**:提供性能分析工具的使用指南,以及内存、CPU和UI性能优化的最佳实践。 7. **Android测试**:介绍...
《Android系统原理与开发要点详解》是一套深入探讨Android操作系统核心机制及开发实践的资料集。这份资源包含多个章节,涵盖了Android系统从基础到高级的各个方面,旨在帮助开发者全面理解和掌握Android开发的关键...
1. **Android图形系统的分析与移植**:这本书会深入探讨Android图形系统的工作原理,包括OpenGL ES、SurfaceFlinger、硬件加速等内容,还会讲解如何将图形系统移植到不同的设备上。 2. **Android真机开发教程**:...
### Android的多媒体系统知识点概述 #### 一、多媒体系统的结构 **1.1 多媒体框架的层级** Android多媒体系统架构复杂,包含了多个层级,主要包括: - **应用层**: 包括用户界面以及应用程序,例如音乐播放器、...
《Android技术内幕 系统卷》是一本深入探讨Android操作系统核心机制的专业书籍,它为开发者提供了深入了解Android系统架构和工作原理的机会。这本书详尽地涵盖了Android系统的各个方面,旨在帮助读者提升对Android...
### Android系统架构详解 #### 一、概览 Android系统架构是Android操作系统的核心组成部分之一,其采用层次化设计,从上至下分为四个主要层级:应用程序层、应用程序框架层、系统运行库层以及Linux内核层。这种...
#### 二、Android系统架构详解 接下来,我们将从技术层面深入探讨Android的系统架构: 1. **Linux内核及驱动**: - **Linux内核**:作为整个Android系统的基础,提供了关键的系统服务,如内存管理、进程管理、...
### Android系统的搭建知识点详解 #### 一、Java JDK 安装与配置 ##### 1.1 下载Java JDK - **32位系统**(如Windows XP):下载`JDK-8u77-windows-i586.exe` - **64位系统**(如Windows 7):下载`JDK-8u77-...