WKWebView 白屏问题

news/2024/11/14 18:37:07/

1、WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程中执行。初次适配 WKWebView 的时候,我们也惊讶于打开 WKWebView 后,App 进程内存消耗反而大幅下降,但是仔细观察会发现,Other Process 的内存占用会增加。在一些用 webGL 渲染的复杂页面,使用 WKWebView 总体的内存占用(App Process Memory + Other Process Memory)不见得比 UIWebView 少很多。

在 UIWebView 上当内存占用太大的时候,App Process 会 crash;而在 WKWebView 上当总体的内存占用比较大的时候,WebContent Process 会 crash,从而出现白屏现象。在 WKWebView 中加载下面的测试链接可以稳定重现白屏现象:

http://people.mozilla.org/~rnewman/fennec/mem.html

这个时候 WKWebView.URL 会变为 nil, 简单的 reload 刷新操作已经失效,对于一些长驻的H5页面影响比较大。

我们最后的解决方案是:

A、借助 WKNavigtionDelegate

iOS 9以后 WKNavigtionDelegate 新增了一个回调函数:

- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView API_AVAILABLE(macosx(10.11), ios(9.0));

当 WKWebView 总体内存占用过大,页面即将白屏的时候,系统会调用上面的回调函数,我们在该函数里执行[webView reload](这个时候 webView.URL 取值尚不为 nil)解决白屏问题。在一些高内存消耗的页面可能会频繁刷新当前页面,H5侧也要做相应的适配操作。

B、检测 webView.title 是否为空
并不是所有H5页面白屏的时候都会调用上面的回调函数,比如,最近遇到在一个高内存消耗的H5页面上 present 系统相机,拍照完毕后返回原来页面的时候出现白屏现象(拍照过程消耗了大量内存,导致内存紧张,WebContent Process 被系统挂起),但上面的回调函数并没有被调用。在WKWebView白屏的时候,另一种现象是 webView.titile 会被置空, 因此,可以在 viewWillAppear 的时候检测 webView.title 是否为空来 reload 页面。

综合以上两种方法可以解决绝大多数的白屏问题。

参考链接:腾讯Bugly


http://www.ppmy.cn/news/563672.html

相关文章

关于安卓手机微信访问https链接白屏的问题

之前部署IIS服务器,安装证书后用浏览器访问链接,显示正常 然后很开心的以为部署很成功,又拿了苹果手机微信访问了一下 也是显示成功,然后拿安卓手机的微信访问就显示白屏,什么都没有。然后我就很是诧异,又用安卓手机的…

苹果手机内存不够白屏

目录 保留数据刷机教程 1、下载爱思助手,下面那个(绝对不是打广告) 2、让手机进入”恢复“模式连上电脑 ​3、下载固件 4、保留数据刷机 其他一些说明 内存不够已经快一年了,这一年一直靠各种删来维持,之前出现过…

Android基础篇 APP启动出现白屏问题

一、问题描述 当打开一个Activity时,如果这个Activity所属的应用还没有在运行,系统会为这个Activity所属的应用创建一个进程(冷启动),但进程的创建与初始化都需要时间,在这个动作完成之前系统要做什么呢&a…

Android-彻底解决启动白屏、跳转页面白屏!

背景&#xff1a;项目在启动页面老是有一瞬间白屏&#xff0c;还有切换日夜间模式时finish栈内所有Activity再启动MainActivity时会白屏。 1. 初步解决办法: 设置窗口的背景色为启动页。 虽然看不到白屏了&#xff0c;但还是有点丑&#xff0c;怪怪的… <style name"…

Android 8.0系统以上手机启动白屏-因为权限问题的解决方案

同样的代码在8.0以下手机上运行无误&#xff0c;但是8.1以及9.0的用户反馈启动白屏。这就奇怪了&#xff0c;我首先断点调试没有发现问题&#xff0c;最后多打了几个断点发现在获取设备信息时抛异常了&#xff0c;断点卡在下面两行。 String device_type android.os.Build.MO…

python闭包和装饰器

目录 一、闭包 1.简单演示 2.内函数修改外函数变量问题 二、装饰器 1.基础使用 2.通用装饰器 3.多个修饰器引用 4.装饰器传参 三、类装饰器 1.callable()和__call__ 2.类装饰器的简单使用 结语 一、闭包 1.简单演示 条件 在函数嵌套&#xff08;函数里面在定义函…

沧州市新华区小赵庄乡社工站幸福院护蕾驿站微项目启动

烈日炎炎&#xff0c;难抵群众热情。6月16日上午&#xff0c;小赵庄乡社工站在蔡庄子社区开展社工站微项目启动仪式暨助老文艺展演活动。市民政局慈善社工科科长罗向凯&#xff0c;新华区民政局局长李瑞勇&#xff0c;新华区小赵庄乡书记徐晋等人出席本次活动。 社工站护蕾驿站…

jpcsp源码解读9:指令的抽象描述与指令的译码

本文尝试说明jpcsp中译码器单元的实现方式。 / 首先是对指令的一个抽象描述&#xff0c;Instruction类&#xff1a; public static abstract class Instruction / java科普&#xff1a; 注意这是一个抽象类&#xff0c;不可以被实例化。只有在其某个子类中实现该抽象类中…