美文网首页
硬件加速

硬件加速

作者: jadefly | 来源:发表于2018-11-28 11:37 被阅读0次

    简介:把某些计算工作交给专门的硬件来做,而不是和普通的计算工作一样交给 CPU 来处理

    Android中:硬件加速专指把 View 中绘制的计算工作交给 GPU 来处理

                     (绘制的计算工作:将绘制方法中的canvas.drawXXX变成实际像素这件事)


    原理

    未开启:把绘制内容写进一个Bitmap,Bitmap 的像素内容被直接用于渲染到屏幕(CPU计算把绘制操作转为像素)

    开启:canvas只把绘制内容转换为GPU的操作保存下来并交给GPU来完成实际的显示工作(CPU只是把绘制工作转换成GPU的操作) 

    加速原因:1.GPU分担工作量并且GPU本身计算常见类型内容(简单图形)具有优势

                      2.绘制机制的改变,提高了界面内容改变时的刷新效率(局部改变只需重绘保存的GPU操作)

    关闭硬件加速:1.application/activity:android:hardwareAccelerated="false"

                              2.onDraw()中:view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);(该方法实际是设置View Layer的)

                                 LAYER_TYPE_SOFTWARE :使用软件来绘制 View Layer,绘制到一个 Bitmap,并顺便关闭硬件加速

                                 LAYER_TYPE_HARDWARE :使用 GPU 来绘制 View Layer,绘制到一个 OpenGL texture

                                 LAYER_TYPE_NONE:关闭 View Layer 

     View Layer:离屏缓冲,单独启用一块地方来绘制这个 View (可能是一块单独的 Bitmap,也可能是一块 OpenGL 的纹理,简单理解为图像)

                           离屏缓存更好理解点,开启后绘制的最终结果会被缓存下来,只要绘制内容没变,无论CPU绘制还是GPU绘制都不用重新计算

                           注:1.View Layer可加速无 invalidate() 时的刷新效率,对需要invalidate的刷新无法加速

                                    (不适用于基于自定义属性绘制的动画,适合平移旋转等view本身没有改变的场景)

                                  2.View Layer 绘制所消耗的实际时间是比不使用 View Layer 时要高的,所以要慎重使用    

    限制:受到 GPU 绘制方式的限制,Canvas 的有些方法在硬件加速开启时会失效或无法正常工作

                (原生自带控件都没有用到 API 版本不兼容的绘制操作,只需检查自定义控件)

    支持

    相关文章

      网友评论

          本文标题:硬件加速

          本文链接:https://www.haomeiwen.com/subject/hrooqqtx.html