Android 使用HardwareAccelerated硬件加速总结

目录

介绍

一、GPU和CPU:

二、开启方式

三、检测方式


介绍

从Android3.0(API Level 11)开始支持硬件加速,在Target API >= 14时是默认开启的。可充分利用GPU的特性,使得界面渲染更加平滑,但是会消耗更多内存RAM。硬件加速自身并非完美,在某些Android 5的rom上,由于内存RAM分配的问题,如果代码不当,会引发闪屏、花屏等渲染问题。

如果只使用系统的View和Drawable,则没有任何副作用;降低页面的内存占用,给硬件加速腾出RAM;在适当的地方关闭硬件加速。

硬件加速的主要原理,就是通过底层软件代码,将CPU不擅长的图形计算转换成GPU专用指令,由GPU完成。

一、GPU和CPU:

CPU(Central Processing Unit,中央处理器)是计算机设备核心器件,用于执行程序代码,软件开发者对此都很熟悉;GPU(Graphics Processing Unit,图形处理器)主要用于处理图形运算,通常所说“显卡”的核心部件就是GPU。

下面是CPU和GPU的结构对比图:

其中:

  • 黄色的Control为控制器,用于协调控制整个CPU的运行,包括取出指令、控制其他模块的运行等;
  • 绿色的ALU(Arithmetic Logic Unit)是算术逻辑单元,用于进行数学、逻辑运算;
  • 橙色的Cache和DRAM分别为缓存和RAM,用于存储信息。

从结构图可以看出,CPU的控制器较为复杂,而ALU数量较少。因此CPU擅长各种复杂的逻辑运算,但不擅长数学尤其是浮点运算。CPU是串行结构,以计算100个数字为例,对于CPU的一个核,每次只能计算两个数的和,结果逐步累加。和CPU不同的是,GPU就是为实现大量数学运算设计的。从结构图中可以看到,GPU的控制器比较简单,但包含了大量ALU。GPU中的ALU使用了并行设计,且具有较多浮点运算单元。

很多计算机中的GPU有自己独立的显存;没有独立显存则使用共享内存的形式,从内存中划分一块区域作为显存。显存可以保存GPU指令等信息。

二、开启方式

HardwareAccelerated硬件加速可以在四个级别上控制硬件加速:

1、application:(AndroidManifest.xml)

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

2、Activity:(AndroidManifest.xml)

        <activity
            android:name=".MainActivity"
            android:hardwareAccelerated="true">

3、Window

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

4、View

 view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

在这四个层次中,应用和Activity是可以选择的,Window只能打开,View只能关闭。

三、检测方式

两种方式来检测应用是否在使用硬件加速:

        view.isHardwareAccelerated();

//推荐
        canvas.isHardwareAccelerated();

推荐使用Canvas.isHardwareAccelerated()来检测。因为View关联到一个硬件加速的window上,仍然可以使用非硬件加速的canvas绘制。

四、总结

优点:

  1. 硬件加速对渲染的流畅度有大幅提升。
  2. 在开启硬件加速后,上下拖动列表的感觉是没有跳帧的平滑拖动感,如果没有硬件加速,拖动时能感受到有丢帧。
  3. 在窗体切换动画上也类似,硬件加速开关对切换动画的影响很大。
  4. 对于video、canvas、webgl,没有硬件加速是没法商用的,Android webview里video标签里的视频如果没有硬件加速会看不到画面。

缺点:

  1. 硬件加速属于双缓冲机制,使用显存进行页面渲染(使用较少的物理内存),导致更频繁的显存操作,可能引起以下现象:白屏、花屏、闪屏;
  2. 低RAM内存配置手机上闪退。
  3. 虽然新出的Android5.0的手机整体配置较高(显存较大),但是如果页面中使用大量图片或者过于复杂的CSS样式时同样容易出现白屏、花屏、闪屏现象。

参考连接

《关于Android硬件加速技术分析》

https://blog.csdn.net/iblade/article/details/80240961

发布了153 篇原创文章 · 获赞 755 · 访问量 100万+

猜你喜欢

转载自blog.csdn.net/csdn_aiyang/article/details/99637142