Cordova打包Cocos Creator HTML5游戏安卓端仅触屏按压时流畅如何解决
问题根因
你遇到的触屏按压才流畅的现象是安卓10及以上版本的渲染优先级动态调度省电机制导致的:
- 新系统为了降低待机功耗,无用户交互时会主动压低WebView渲染线程的CPU/GPU调度优先级,强制限制帧率在30fps以下
- 检测到触屏输入时,系统会临时将应用优先级拉到最高,解除帧率限制,所以你会感到明显流畅
- 2017年的旧手机安卓版本低于9,没有这套动态调度逻辑,因此默认就是满帧运行
你之前的方案无效的原因:
- Crosswalk WebView早已停止维护,最高仅支持安卓7,在新系统上不仅无法提升性能,反而会引入兼容问题
- 仅修改Manifest的硬件加速配置会被Cordova config.xml的全局配置覆盖,无法生效
- Ionic WebView默认没有开启高优先级渲染配置,对游戏场景没有优化
可行修复方案
- 调整config.xml安卓配置
在你的<platform name="android">标签内新增以下配置项:
<!-- 强制开启硬件加速 --> <preference name="HardwareAccelerated" value="true" /> <!-- 禁用WebView滚动弹性效果,减少多余渲染开销 --> <preference name="DisallowOverscroll" value="true" /> <!-- 允许本地资源直接加载,避免跨域导致的资源加载延迟 --> <preference name="AndroidInsecureFileModeEnabled" value="true" /> <!-- 禁用应用待机省电限制 --> <preference name="AllowIdleness" value="false" />
- 修改MainActivity强制高优先级渲染
找到路径platforms/android/app/src/main/java/[你的包名]/MainActivity.java,在onCreate方法末尾添加以下代码:
// 保持屏幕常亮,避免系统降频 getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 强制WebView使用硬件渲染层 getView().setLayerType(View.LAYER_TYPE_HARDWARE, null); // 安卓9及以上关闭默认渲染效果限制 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { getView().setRenderEffect(null); }
- 调整Cocos Creator项目配置
在游戏入口脚本的初始化逻辑中添加以下代码,强制锁60帧,避免自适应帧率被系统限制:
// 强制锁定前台帧率为60,后台切到30省电 cc.game.setFrameRate(60); cc.game.on(cc.game.EVENT_HIDE, () => cc.game.setFrameRate(30)); cc.game.on(cc.game.EVENT_SHOW, () => cc.game.setFrameRate(60));
- 清理无效插件
卸载Crosswalk WebView、Ionic WebView插件,使用Cordova 10自带的系统WebView即可,新安卓版本的系统WebView性能远高于停止维护的Crosswalk。
内容的提问来源于stack exchange,提问作者Yurii Horchynskyi
相关产品推荐
相关产品推荐

