HBuilderX 2.3.4+版本已将iOS上所有webview的默认内核由UIWebview调整为WKWebview请参考https://ask.dcloud.net.cn/article/36348,
当内存占用过大或者应用切换到后台内存被回收会导致WKWebview内核Crash引起应用白屏,为了提高体验App支持Crash后的恢复,开发者可以通过简单的配置支持该功能。
注意
目前该功能针对在前台的应用,如果应用在后台时会直接重新启动不适用该规则
注意uniapp在使用vue页面时,有自带的恢复逻辑,不适用本规则。如果是nvue页面则不涉及这个问题。
支持的恢复行为
- "restart"
重启应用,关闭所有页面重新打开应用首页,可通过(plus.runtime.isRecovery)来判断应用是否恢复重启 - "reload"
重新加载当前WKWebview(崩溃的WKWebview)页面,页面中JS上下文中所有数据丢失,在当前Webview中可通过plus.webview.isRecovery判断是否恢复重新加载,在其它Webview中可监听recovery事件来判断 - "none"
不做任何操作
全局配置
manifest.json中配置默认值
"plus": { //uni-app项目对应节点名称为"app-plus"
"kernel": {
"ios": "WKWebview",
"recovery": "restart|reload|none"
},
// ...
}
webview配置
webview style新增kernelRecovery属性
通过该项可以自定义单个webview的恢复行为,覆盖全局配置
引用文档
示例
var webview = plus.webview.create("[url]","[id]", {kernelRecovery:"restart|reload|none"});
API
plus.webview.isRecovery
用于判断当前Webview窗口是否由于内核崩溃自动恢复,当配置reload时生效
引用文档
plus.runtime.isRecovery
用于判断当前应用是否是Webview崩溃自动恢复导致的启动,当配置restart时生效
引用文档
事件
recovery
当恢复行为配置为reload时,webview重新创建完成后会触发该事件,可以监听该事件做具体处理
引用文档
评论区各位开发者吐槽较多,但这个不是DCloud不解决,是iOS不解决。
如果使用webview渲染,内存过高时,只能重启webview。
- 降低webview里的内存占用
- 改用nvue或uvue原生渲染。但nvue由于weex不维护了也有坑,使用uni-app x的uvue比较好。
- 接受重启webview,优化重启过程的体验
50 个评论
要回复文章请先登录或注册
2***@qq.com
7***@qq.com
7***@qq.com
456vv
5***@qq.com
8***@qq.com
5***@qq.com
hbxw
穷鬼溪风
1***@qq.com