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)
<activityandroid: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绘制。
四、总结
优点:
- 硬件加速对渲染的流畅度有大幅提升。
- 在开启硬件加速后,上下拖动列表的感觉是没有跳帧的平滑拖动感,如果没有硬件加速,拖动时能感受到有丢帧。
- 在窗体切换动画上也类似,硬件加速开关对切换动画的影响很大。
- 对于video、canvas、webgl,没有硬件加速是没法商用的,Android webview里video标签里的视频如果没有硬件加速会看不到画面。
缺点:
- 硬件加速属于双缓冲机制,使用显存进行页面渲染(使用较少的物理内存),导致更频繁的显存操作,可能引起以下现象:白屏、花屏、闪屏;
- 低RAM内存配置手机上闪退。
- 虽然新出的Android5.0的手机整体配置较高(显存较大),但是如果页面中使用大量图片或者过于复杂的CSS样式时同样容易出现白屏、花屏、闪屏现象。
参考连接
《关于Android硬件加速技术分析》
https://blog.csdn.net/iblade/article/details/80240961
Android 使用HardwareAccelerated硬件加速总结相关推荐
- android开发 硬件加速,Android 开发之硬件加速
(1)定义 所谓硬件加速,指的是把某些计算工作交给专门的硬件来做,而不是和普通的计算工作一样交给 CPU 来处理.这样不仅减轻了 CPU 的压力,而且由于有了专门硬件的处理,这份计算工作的速度也被加快 ...
- 一文读懂,Android中的硬件加速
/ 今日科技快讯 / 近日,携程发布<2023年春节旅游总结报告>.报告显示,春节期间国内外旅行订单皆迎来三年巅峰,旅游订单整体较虎年春节增长4倍.同时,春节期间出境游整体订单同比 ...
- Android中使用硬件加速的技巧
http://www.uzzf.com/news/2060.html 从Android 3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速.使用GPU的View在Canvas上进 ...
- android 自定义view 硬件加速,Android自定义View(八) -- 硬件加速
Android自定义View(八) – 硬件加速 今天学习自定义View部分的最有一篇:硬件加速因为无法录制GIF,所以本篇内容基本为原博 本文计划根据HenCoder系列文章进行学习,所以代码风格及 ...
- Android渲染--重温硬件加速上
Android中绘图的API很多,比如2D的基于Skia的接口,3D的绘图OpenGLES,Vulkan等.Android早期系统多数都是采用2D的绘图模式,比如绘制一张Bitmap图片.随着用户对视 ...
- android关闭硬件动画加速器,Android中的硬件加速
从Android 3.0开始,Android的2D渲染管线可以更好的支持硬件加速.硬件加速使用GPU进行View上的绘制操作. 硬件加速可以在一下四个级别开启或关闭: Application Acti ...
- 安卓禁用硬件加速_[转]Android如何关闭硬件加速
硬件加速 Android 3.0 (API level 11), 开始支持 所有的View 的canvas都会使用GPU,但是硬件的加速会占有一定的RAM. 在API >= 14上,默认是开启的 ...
- android view硬件加速,Android TextureView和硬件加速
我正在尝试实现 this page上显示的示例.我已经尝试了运行android 4及更高版本的三个不同设备,并且在所有情况下,我都会看到带有此警告的黑屏: 01-27 20:01:22.683: W/ ...
- android开发 硬件加速,Android开发的硬件加速
说到硬件加快就必需和软件加快一路注释. (1)界说 所谓硬件加快,指的是把某些较量工作交给专门的硬件来做,而不是和通俗的较量工作一般交给 CPU 来处理.如许不光减轻了 CPU 的压力,并且因为有了专 ...
最新文章
- Spring学习手册番外:context:annotation-config/ 和 mvc:annotation-driven / 的区别
- 在C#中重新抛出异常的正确方法是什么? [重复]
- eclipse中设置python的版本
- 建模揭秘----构建用户模型
- python3.6.4安装教程-Python3.6.4官方版
- ios开发text kit_iOS富文本(三)深入使用Text Kit
- vue中如何关闭eslint检测?
- MySQL高级 - 锁 - 锁的概述及分类
- 移动端 关闭浏览器事件_前端开发中什么是移动端点透事件?
- AS3的Number类型变量不指定初始值,则其初始值为NaN,而不是0.0
- 计算机中丢失无法开机密码,手把手教你“电脑开机密码忘记了,无法登录”的解决方法...
- vscode背景的更换_vscode背景图怎么换
- 好用的计算属性clac
- 了解区块链(一)——加密货币以及区块链的价值
- mysql 最大值65536_SQL server事物复制报错:要复制的 LOB 数据的长度(xxxxx)超出了配置的最大值 65536...
- matlab 绘制可行域内的函数图像
- V型滤池类毕业论文文献包含哪些?
- CTFshow--常用姿势
- 【C++入门】烦人的引用
- 《简约至上》读书笔记
热门文章
- js获取id后添加html代码,js获取Id的方法getElementById与$的由来和用Id判断元素是否存在及批量动态获取 Id...
- 录制回放java_使用Katalon Recorder录制与回放脚本
- 信息工程监理:规范工程的灵药
- 维修点滴:打印机故障
- 索尼PCM-M10使用心得
- 注册德国商标条件和程序材料注意事项
- KLWP 为安卓手机桌面添加 gif 动图
- linux获得蓝牙外设mac,iOS 与蓝牙操作如何获取MAC地址
- could not open selected vm debug port 8700
- Labelme安装及使用教程