Android_硬件加速

Android中的硬件加速


前言

从andoroid 3.0开始,Android的2D渲染管线可以更好的支持硬件加速。硬件加速是使用GPU进行View上的绘制操作。

硬件加速的级别

  1. application
  2. activity
  3. window
  4. view

为何有多级别的硬件加速

硬件加速可以带啦性能的提升,为什么android不直接全部使用硬件加速,而是区别出来多级硬件加速呢?因为并不是所有的2D图形操作都支持硬件加速的。例如在应用中使用了自定义的视图或者绘图调用,这时使用硬件加速,应用可能会错误运行。当然了,如果只是使用标准的视图和drawable那是不会有问题的。

代码解释

  1. 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>
  2. window级别(java代码中)

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
  3. view级别(关闭操作)

    mTestView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

    【注】view级别是无法打开硬件加速的,但是可以关闭,因为有很多自定义的view是不支持硬件加速的。

不支持硬件加速的绘图操作(摘录)

不支持的
CanvasPaint
clipPath()setLinearText()
clipRegion()setMaskFilter()
drawPicture()setRasterizer()
drawPosText()
drawTextOnPath()
drawVertices()
开启后效果改变
Canvas
clipRect()XOR, Difference和ReverseDifference裁剪模式被忽略,3D变换将不会应用在裁剪的矩形上。
drawBitmapMesh()colors数组被忽略
drawLines()反锯齿不支持
setDrawFilter()可以设置,但无效果
Paint
setDither()忽略
setFilterBitmap()过滤永远开启
setShadowLayer()只能用在文本上
ComposeShader
ComposeShader只能包含不同类型的shader (比如一个BitmapShader和一个LinearGradient,但不能是两个BitmapShader实例)
ComposeShader不能包含ComposeShader

补充(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

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论
<p style="margin: 10px 0px 0px; max-width: 100%; box-sizing: border-box; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff; color: #3e414d; font-weight: bold;">FFmpeg+DXVA2+D3D硬件加速原理与案例实战</p> <p style="margin: 10px 0px 0px; max-width: 100%; box-sizing: border-box; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff; color: #666c80;">FFmpeg系列之34:<br />FFmpeg+DXVA2+D3D硬件加速原理与案例实战,带领大家一起来学习dxva与dxva2的入门知识,学习D3D开发入门实战,然后使用FFmpeg+dxva2+d3d进行硬件加速案例实战。大家在学习中需要认真观看视频,并分析知识点,然后需要动手实践。</p> <p style="margin: 10px 0px 0px; max-width: 100%; box-sizing: border-box; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff; color: #666c80;"> </p> <h1 style="box-sizing: border-box; margin: 0px; font-weight: 400; line-height: 1.2; font-size: 14px; font-family: 'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif; padding: 0px; color: #333333;"><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; max-width: 100%; color: #ff0000;">目前FFmpeg第二季【</span></span><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; max-width: 100%; color: #ff0000;">编解码专题</span></span><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; max-width: 100%; color: #ff0000;">】,主要包括以下课程:</span></span></h1> <p style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: 'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif; color: #333333; font-size: 14px; max-width: 100%;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; max-width: 100%; font-size: 18px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px;">FFmpeg4.3系列之31:像格式与压缩<br style="box-sizing: border-box;" />FFmpeg4.3系列之32:MPEG-1/2视频编解码<br style="box-sizing: border-box;" />FFmpeg4.3系列之33:H.264/H.265视频编码<br style="box-sizing: border-box;" />FFmpeg4.3系列之34:FFmpeg+DXVA2+D3D硬件加速<br style="box-sizing: border-box;" />FFmpeg4.3系列之35:FFmpeg+CUDA硬件加速</span></span></p>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

寒弦

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值