uni-app Android硬件加速详解

发布于 1周前 作者 eggper 来自 Uni-App

uni-app Android硬件加速详解 从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

硬件加速的开关控制

App级别

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

{
  "plus": {
    "distribute": {
      "google": {
        "hardwareAccelerated": true
      }
    }
  }
}

要开启硬件加速设置值为true,关闭硬件加速则设置值为false。不配置的话默认是auto。 保存提交到App云端打包才能生效。

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里进行。

{
  "plus": {
    "hardwareAccelerated": true
  }
}

1 回复

在uni-app中,针对Android平台的硬件加速功能,主要是通过配置和优化来提升应用的渲染性能和用户体验。硬件加速利用GPU来处理图形渲染任务,从而减轻CPU的负担,提高渲染效率。以下是如何在uni-app项目中配置和优化Android硬件加速的相关代码示例和说明。

1. 配置manifest.json

首先,在manifest.json文件中,你可以指定应用是否启用硬件加速。对于大多数应用来说,默认启用硬件加速是推荐的。

{
  "mp-weixin": {},
  "app-plus": {
    "distribute": {},
    "android": {
      "hardwareAccelerated": true // 启用硬件加速
    }
  }
}

2. 使用Canvas时启用硬件加速

在uni-app中使用Canvas时,可以通过设置Canvas的layerType属性来启用硬件加速。不过,需要注意的是,直接在uni-app的Canvas组件上设置这个属性并不直接支持,但可以通过原生插件或自定义组件的方式实现。

假设你有一个自定义的Canvas组件,在Android原生代码中,可以这样设置:

// 假设这是你的自定义Canvas组件的Java代码部分
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
    canvasView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}

3. WebView硬件加速

在uni-app中,WebView组件也受益于硬件加速。Android WebView默认会跟随系统的硬件加速设置,但你可以通过代码确保这一点。

在AndroidManifest.xml中(通过原生插件或自定义基座配置),可以确保整个应用启用硬件加速:

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

4. 优化渲染性能

除了启用硬件加速,还有一些额外的优化措施可以提升性能,比如:

  • 减少重绘和回流:通过合并DOM操作,减少页面的重绘和回流次数。
  • 使用CSS3动画:CSS3动画通常比JavaScript动画更高效,因为它们可以在GPU上执行。
  • 图片优化:使用合适的图片格式和大小,避免加载过大的图片资源。

示例代码总结

虽然直接在uni-app的框架代码中配置硬件加速的选项有限,但通过配置manifest.json和原生插件的开发,你可以有效地启用和优化Android硬件加速。以下是一个简化的示例,展示了如何在manifest.json中配置硬件加速:

{
  "app-plus": {
    "android": {
      "hardwareAccelerated": true
    }
  }
}

通过上述配置和优化,你可以显著提升uni-app应用在Android平台上的性能和用户体验。

回到顶部