WKWebview的那些坑之白屏问题
项目中用到WKWebview的童鞋有可能会遇到突然页面白屏问题,这个问题是因为内存不够了webview的进程被程序终止了,那我们如何监听到进程被终止的事件以及做何处理呢?
(一)监听WKWebview进程终止
iOS9时系统提供了一个监听方法
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0){
}
iOS8则需要自己添加一个监听事件,即监听URL,当之前的URL不为空,而新的URL为空时则表示进程被终止了,c此处建议添加一个iOS8的判断,并且delloc时需要移除观察者,也需加iOS8判断
[self.wkwebView addObserver:self forKeyPath:@"URL" options:NSKeyValueObservingOptionNew context:nil];
iOS9监听处理,此处的processDidTerminated变量,是为了标志进程终止这个状态,可用户重新加载页面时保存数据,以免数据丢失。
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0){
NSLog(@"进程被终止");
NSLog(@"%@",webView.URL);
processDidTerminated = YES;
[webView reload];
}
iOS8监听处理
#pragma mark - KVO
// 计算wkWebView进度条
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (object == self.wkwebView && [keyPath isEqualToString:@"estimatedProgress"]) {
CGFloat newprogress = [[change objectForKey:NSKeyValueChangeNewKey] doubleValue];
if (newprogress == 1) {
[self.progressView setProgress:1.0 animated:YES];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.progressView.hidden = YES;
[self.progressView setProgress:0 animated:NO];
});
}else {
self.progressView.hidden = NO;
[self.progressView setProgress:newprogress animated:YES];
}
}else if (object == self.wkwebView && [keyPath isEqualToString:@"URL"])
{
NSURL *newUrl = [change objectForKey:NSKeyValueChangeNewKey];
NSURL *oldUrl = [change objectForKey:NSKeyValueChangeOldKey];
if (IsNull(newUrl) && !IsNull(oldUrl)) {
processDidTerminated = YES;
[self.wkwebView reload];
};
}
}
WKWebview的那些坑之白屏问题相关推荐
- iOS开发~WKWebView白屏适配
WKWebView虽好,但白屏问题也很苦恼,下面分享一下自己解决问题的过程. 公司项目使用Cordova框架,做原生项目嵌入H5,业务复杂了以后,H5资源也越来越大,占用内存越来越多,加载也越来越慢, ...
- webview加载页面有2秒白屏_iOS WKWebview 白屏检测实现
前言 自ios8推出wkwebview以来,极大改善了网页加载速度及内存泄漏问题,逐渐全面取代笨重的UIWebview.尽管高性能.高刷新的WKWebview在混合开发中大放异彩表现优异,但加载网页过 ...
- as3 android白屏,Android 8.0中一些坑以及对应的解决方法
前言 虽然 Android 9.0 都已经面世了,本篇文章写的有点迟了. 但是迟到好过不到,因此基于此这边还是记录一下项目中遇到的 Android 8.0 的坑及对应解决方法. 每次系统升级,虽然系统 ...
- 深入理解WKWebView白屏
白屏是webview进程终止之后的表现,在webview因异常使用内存.CPU等资源时,webkit会终止当前m页展示的进程,在用户端表现为白页. 第一.webview的进程被终止的原因有哪些? Pr ...
- WKWebView白屏问题
WKWebView白屏问题 WKWebView自诩拥有更多的加载速度,更低的内存占用,但实际上WKWebView是一个多进程组件,Network Loading以及UI Rendering在其他进程中 ...
- wkwebview 在iOS10以下系统显示白屏问题
打了测试环境的包,在iOS11系统上任何wkwebview界面显示都没有什么问题,但是到了iOS10的系统上,或者iOS9的系统上都显示白屏,遇到不配和你调试的H5,你想把他撕吧撕吧喂鹰的心都有了,但 ...
- WKWebView 白屏问题
1.WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程中执行.初次适 ...
- WKwebview 白屏问题——(WebApp/HybirdApp)
我们app从ReactNative转H5app,在开发过程中发现一个顽固性问题.点击H5的tabbar或者页面之间点击跳转会偶现白屏问题.或者app退到后台一段时间唤醒app会出现白屏. 白屏原因: ...
- 修复WKWebView的白屏问题
公司的一个iOS app登录界面是原生开发,登录成功后打开一个webview加载web页面.第二次登录就看是否保存了token,如果有就直接打开webview加载.但是测试反应登录后在后台放一段时间, ...
最新文章
- ES权威指南[官方文档学习笔记]-57 Analysis and analyzers
- 北大韦神透露现状:自己课讲得不太好,中期学生退课后就剩下5、6个人...
- Android7.1 Presentation双屏异显原理分析
- python 批量增加文件前缀_Excel VBA工作薄 7.5批量增加工作表前缀/后缀 工作表区分更方便...
- 在servlet中读取初始化参数和上下文参数的方法getServletContext()和getInitParameter()
- Java中Volatile的理解
- maven-antrun-plugin - Target
- 模版:线段树合并+线段树分裂
- 数据结构第六篇——顺序存储结构与链式存储结构的特点
- gstat | 空间插值(三)——克里金插值之泛克里金和简单克里金
- javascript 开发多种类型的应用(Electron 跨平台开发)
- Linux相对路径和绝对路径
- Android实现圆形图片 真菜鸟食用
- 基于深度学习的以图搜图
- Itext中强行调整行高缩小行间距
- Android:滤镜效果ColorMatrix用法一
- Microbit Turnipbit 孩子也能做的声光控开关
- Java培训,我为什么选择传智播客
- 什么是莆田鞋,价格贵吗,质量怎么样
- Elasticsearch专栏-1.为什么引入es
热门文章
- delphi 简单代码实现安卓手机震动
- VB6对接语音验证码接口DEMO示例
- dell服务器 指示灯_Dell PowerEdge:传统服务器(第10代和第11代)上的系统LED状态指示灯...
- uniapp 微信小程序开启分包
- 【Vue系列1】—— Vue入门和基础指令
- [C#]自定义修改文件夹颜色及图标含源码
- 2017年全球最有影响力的50家机器人公司排行榜
- 考研日语线上笔记(四):中级日语语法总结20课(1~10)
- 一本通 1283:登山
- 微信android字体颜色,企业微信使用markdown发送消息,手机端看不到font标签设置的字体颜色...