DCloud_IOS_XTY
DCloud_IOS_XTY
  • 发布:2019-11-01 18:23
  • 更新:2024-11-14 15:08
  • 阅读:16317

iOS平台5+APP/WAP2APP使用WKWebview内核时由于内核崩溃引起白屏后自动恢复的方法

分类:HTML5+
h5+

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。

  1. 降低webview里的内存占用
  2. 改用nvue或uvue原生渲染。但nvue由于weex不维护了也有坑,使用uni-app x的uvue比较好。
  3. 接受重启webview,优化重启过程的体验
4 关注 分享
DCloud_iOS_XHY 3***@qq.com 穷鬼溪风 rysnone

要回复文章请先登录注册

爱吃鱼的靖哥哥

爱吃鱼的靖哥哥

回复 t***@ledreamer.com :
我的也是,不知道怎么处理,急死了
2022-09-23 09:16
小小白啊

小小白啊

hx:3.6.3 ,vue3+uniapp 依旧有问题。
2022-09-21 09:05
t***@ledreamer.com

t***@ledreamer.com

`plus.webview.isRecovery` 和 `plus.runtime.isRecovery` 都是undefined
2022-06-28 09:47
9***@qq.com

9***@qq.com

还存在这个问题,vue3+uniapp
2022-05-27 22:47
s***@zjhuatie.com

s***@zjhuatie.com

3.3.5.20211229 版本还存在这个问题
2022-01-21 19:25
z***@163.com

z***@163.com

白屏+1
2021-11-23 14:26
DCloud_IOS_XTY

DCloud_IOS_XTY (作者)

回复 下拉刷新啊 :
@DCloud_iOS_WZT
2021-11-23 10:08
下拉刷新啊

下拉刷新啊

快2022年了, 这个问题怎么解决?ios长时间后台运行,进去就其他tab页白屏,然后不白屏的tab页原生刷新失效了,咋搞?
2021-11-22 17:25
1***@qq.com

1***@qq.com

回复 9***@qq.com :
内存满了,ios就会回收部分内存
2021-11-17 19:16
9***@qq.com

9***@qq.com

回复 2***@qq.com :
我这边倒是不好复现这个问题,有时间停好久才会出现白屏,都不知道怎么搞了
2021-08-02 17:06