Android_硬件加速
来源:互联网 发布:职场霸凌 知乎 编辑:程序博客网 时间:2024/06/10 23:05
Android中的硬件加速
前言
从andoroid 3.0开始,Android的2D渲染管线可以更好的支持硬件加速。硬件加速是使用GPU进行View上的绘制操作。
硬件加速的级别
- application
- activity
- window
- view
为何有多级别的硬件加速
硬件加速可以带啦性能的提升,为什么android不直接全部使用硬件加速,而是区别出来多级硬件加速呢?因为并不是所有的2D图形操作都支持硬件加速的。例如在应用中使用了自定义的视图或者绘图调用,这时使用硬件加速,应用可能会错误运行。当然了,如果只是使用标准的视图和drawable那是不会有问题的。
代码解释
application和activity级别的硬件加速,可以直接在AndroidManifest.xml中进行相关的属性配置。
application级别<application android:hardwareAccelerated="true" >
activity级别
<activity android:hardwareAccelerated="true">
application & activity
<application android:hardwareAccelerated="true"> <activity android:hardwareAccelerated="false"/></application>
window级别(java代码中)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
view级别(关闭操作)
mTestView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
【注】view级别是无法打开硬件加速的,但是可以关闭,因为有很多自定义的view是不支持硬件加速的。
不支持硬件加速的绘图操作(摘录)
补充(Android绘制模型)
开启硬件加速后,android采用新的硬件绘制模型,这里,我简要写一下:基于软件的绘制模型和基于硬件的绘制模型有的不同
基于软件的绘制模型
在软件绘制模型下,视图按照如下两个步骤绘制:
1. Invalidate the hierarchy
2. Draw the hierarchy
应用程序调用invalidate()更新UI的某一部分,失效(invalidation)消息将会在整个视图层中传递,计算每个需要重绘的区域(脏区域)。然后Android系统将会重绘所有和脏区域有交集的view。
缺点:
1.每个绘制操作中会执行不必要的代码。比如如果应用程序调用invalidate()重绘button,而button又位于另一个view之上,即使该view没有变化,也会进行重绘。
2.可能会掩盖一些应用程序的bug。因为android系统会重绘与脏区域有交集的view,所以view的内容可能会在没有调用invalidate()的情况下重绘。这可能会导致一个view依赖于其它view的失效。
基于硬件的绘制模型
Android系统仍然使用invalidate()和draw()来绘制view,但在处理绘制上有所不同。Android系统会先记录绘制命令到显示列表,而不是立即执行绘制命令。另一个优化就是Android系统只需记录和更新标记为脏的view(invalidate())。新的绘制模型包含三个步骤:
1. Invalidate the hierarchy
2. 记录和更新显示列表
3. 绘制显示列表
转载请注明:http://blog.csdn.net/zifeng1203s/article/details/44004907
- Android_硬件加速
- 硬件加速
- 硬件加速
- 硬件加速
- 硬件加速
- 理解硬件加速
- OpenGL硬件加速
- android硬件加速
- OpenGL硬件加速
- 硬件加速简要
- Xorg 硬件加速
- android硬件加速
- 硬件加速 setlayertype
- 什么是硬件加速
- 硬件加速原理
- 关闭硬件加速
- Android硬件加速
- Android硬件加速
- 薇薇动听(二)
- Java中接口里定义的成员变量
- 基于servlet的服务端与安卓客户端的通信(文本)
- poj 1459 网络流EK算法/ Dinic算法
- Oracle高级查询之GROUP BY
- Android_硬件加速
- (lazarus)在安卓中画一个chart
- ios-UIButton
- HTTP状态代码2XX、3XX、4XX、5XX分析
- cocos2d面试题
- 如何编写跨平台的C/C++代码
- MFC 查找宽字节和多字节字符串之间无法转换的字符
- Android SharedPreferencs基本使用
- 1644 - Prime Gap