强制开启Android Webview GPU 加速的方法
常用方法
浏览器开启GPU加速可以让渲染的性能更好,可以有效的利用硬件的能力来提高页面的绘制帧率。在安卓平台使用webview的场景下,开发人员通常会通过以下两种方法来让webview使用硬件加速能力来渲染页面。
方法一:
在应用的启动配置中,添加 android:hardwareAccelerated="true"配置,如下图所示:
方法二:
通过在webview初始化的方法中使用如下代码:
wv.setLayerType(View.LAYER_TYPE_HARDWARE, null);
以上两种方法在绝大部分的设备上都可以生效,当我们用chrome提供的远程调试工具调试webview打开的页面,并将fps看板显示出来时,我们可以看到上面显示了GPU Raster处于启用状态,如下图所示:
但是在一些小众机型或安卓系统中,这两个方法无法生效,FPS面板会显示GPU Raster处于关闭状态,从而导致网页上的一些动画使用CPU来绘制,因此非常卡顿,帧率也非常低。如下图所示:
既然上述两种常用的方法无法生效,那么有没有其它办法可以解决呢?
命令行参数
遇到这个问题的时候,联想到了chrome app在启动时可以通过传入命令行参数
-force-gpu-rasterization
来强制开启GPU Raster,那么webview组件能不能用同样的方法呢?在webview的官网文档中遨游了一段时间后发现是有的。
Android webview在启动时,会去 /data/local/tmp/ 目录下找到一个名为 webview-command-line 的文件,并读取里面的内容作为启动参数,并且文件内容中的参数形式与chrome app是相同的。因此,我们通过在该文件中写入命令行参数的方式来实现,如下:
cd /data/local/tmp
touch webview-command-line
echo '_ --force-gpu-rasterization' > webview-command-line
完成写入后重启webview,打开网页查看FPS面板:
可以从图中看到GPU Raster已经被开启,帧率也上到了43FPS。
相关资料: