DCloud_App_Array
DCloud_App_Array
  • 发布:2014-08-31 16:15
  • 更新:2019-05-11 17:20
  • 阅读:65096

Android硬件加速详解

分类:HTML5+

从Android3.0(API Level 11)开始,支持硬件加速,可充分利用GPU的特性,使得界面渲染更加平滑。
但是硬件加速自身并非完美,在某些Webview版本上,比如Android5初期的一些rom上的Webview版本是chrome37、38版本,由于其本身的硬件加速策略的bug,导致代码稍微给硬件一些压力,就会引发闪屏、花屏等渲染问题。

硬件加速的好处

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

硬件加速的代价

硬件加速属于双缓冲机制,使用显存进行页面渲染(使用较少的物理内存),导致更频繁的显存操作,可能引起以下现象:
花屏、闪屏、分块渲染;
那么对于开发者,始终要注意降低页面的内存占用,给硬件加速腾出RAM。
具体参考http://ask.dcloud.net.cn/article/12837

硬件加速的开关控制

在5+App可以从两个级别对硬件加速进行控制:

App级别

程序级别开关是设置整个程序是否使用硬件加速,关闭后程序中所有页面将都不可使用硬件加速功能,可通过以下方式操作:

  • HBuilder中配置的方法
    打开应用的manifest.json文件,切换到“代码视图”,在plus->distribute->google节点下添加“hardwareAccelerated”字段:

    要开启硬件加速设置值为true,关闭硬件加速则设置值为false。不配置的话默认是auto。
    保存提交到App云端打包才能生效。
  • 离线打包配置的方法
    打开工程的AndroidManifest.xml文件,切换到代码视图模式,在application节点下修改“android:hardwareAccelerated”属性值:

    要开启硬件加速设置值为true,关闭硬件加速则设置值为false。
    保存后重新编译即可生效。

Webview窗口级别

除了App级别,还可以对单个Webview控制是否开启硬件加速功能,比如App关闭了硬件加速,但某个webview又打开了硬件加速:

  • 新开Webview窗口是否开启硬件加速
    创建Webview窗口时(注意创建完毕再修改无效),可设置WebviewStyle参数的hardwareAccelerated属性值控制是否开启硬件加速:
    var styles = {hardwareAccelerated:true}; // true表示开启Webview的硬件加速,false表示关闭Webview的邮件加速  
    var webview = plus.webview.create( "url", "id", styles );     
    webview.show();  
  • 设置首页webview是否开启硬件加速
    上面的新开webview时设置硬件加速对首页是无效的,因为首页不是js创建的。首页webview的硬件加速单独配置需要在manifest里进行。
    注意此配置与全局设置不同,虽然都在manifest配置,但此配置仅是对首页生效的,并非全局App的硬件加速配置。
    打开应用的manifest.json文件,切换到“代码视图”,在plus节点下添加“hardwareAccelerated”字段:

    设置值为true表示开启硬件加速,false表示关闭硬件加速。

关于硬件加速默认的auto值的说明,即不同平台上5+runtime默认开启或关闭硬件加速的策略

参考:http://ask.dcloud.net.cn/article/12830
可以通过5+ API查询Webview默认硬件加速是否开启
但注意此api即defauleHardwareAccelerated,是我们的引擎的默认策略查询,开发者手动打开硬件加速后,并不会更改这个值。
检测硬件加速是否开启,一方面看上下滑动的流畅度,另一种方法是放一个video标签,看看视频是否有画面。

关闭硬件加速时,如果想播放视频,有2种方案:

  1. 对播放视频的webview单独开硬件加速,创建这个webview时参考上面的方法开启硬件加速。
  2. 调用外部原生播放器单独播放视频,http://ask.dcloud.net.cn/question/614
16 关注 分享
jasonxxp 蔡繁荣 木子喵 gaus 大牙酱 380989353@qq.com 王彦坡 Trust whucj88@163.com 行走江湖 Android_XR zhuhong02199@163.com cold 371695530@qq.com 邢天城 漠

要回复文章请先登录注册

tgfheew

tgfheew

██████黄直播【 5kky.com 】 ██████

██████黄直播【 5kky.com 】 ██████
2019-05-11 17:20
362339094@qq.com

362339094@qq.com

回复 移动大人:
你好,请问怎么处理的呢
2019-01-23 20:05
cpf19911014@126.com

cpf19911014@126.com

然并卵
2018-08-17 11:19
302979096@qq.com

302979096@qq.com

感觉无效
2018-08-04 17:33
移动大人

移动大人

回复 王彦坡:
你的问题解决了吗?我现在也遇到了这样的问题
2018-04-17 09:14
371695530@qq.com

371695530@qq.com

mark
2017-05-03 11:12
wen如故i

wen如故i

底部切换webview,其中有个webview有地图,加载太慢了,试了一下,就单单加载地图那一页,1-1.5秒之间。加上其他三个webview,5秒。
2017-04-19 10:55
1019422167@qq.com

1019422167@qq.com

mark
2017-03-24 09:11
362673301@qq.com

362673301@qq.com

mark
2017-03-11 18:14
2605950077@qq.com

2605950077@qq.com

播放片时,按返回就马上退出,有什么办法可以改成返回吗?
2016-11-17 14:23
王彦坡

王彦坡

回复 DCloud_heavensoft:
视频的默认显示图片怎么显示视频的第一帧?
2016-09-11 18:26
王彦坡

王彦坡

刚好遇到这个问题,刚开始不知道怎么回事没有视频图像,看了帖子才知道是没有开启硬件加速,亲测,google那里加全局加速没有效果,要在新开页面那里加上就可以,还有一点就是,视频未播放前视频窗口没有图片显示,不知道怎么获取视频第一帧作为视频默认图片。求指点。
2016-09-11 18:25
上官萧晨

上官萧晨

添加硬件加速 webview 里加了 var styles = {hardwareAccelerated:true}; manifest.json里也加了"hardwareAccelerated":"true", 不管用还是没有图像,
2016-07-25 11:04
1476339526@qq.com

1476339526@qq.com

禁用了安卓webview硬件加速会不会使其速度性能降低? 感觉有点慢了
2016-06-30 22:18
我的一沓

我的一沓

在创建webview时添加styles来开启硬件加速在miui8上确实可以,所以默认是没有开启的吗?之前在manifest.json里的google节点添加了开启硬件加速的配置项,貌似没效果。
2016-06-24 09:42
smith

smith

为什么在manifest.json文件中添加了"hardwareAccelerated": true,视频仍然只有声音没有图像vivo手机Android5.0版本
2016-04-14 14:48
DCloud_heavensoft

DCloud_heavensoft

回复 长胖的小胖子:
硬件加速打开的标记,不是defauleHardwareAccelerated,这个是我们的引擎的默认策略查询,你手动打开硬件加速后,并不会更改这个值。
检测硬件加速是否开启,一方面看上下滑动的流畅度,另一种方法是放一个video标签,看看视频是否有画面。
2016-03-30 06:41
长胖的小胖子

长胖的小胖子

无论怎么设置,在华为android 6系统下,硬件加速始终打不开,用的hb 7.0
2016-03-28 21:38