ToB企服应用市场:ToB评测及商务社交产业平台

标题: App WebView白屏检测及解决总结,包括Android 和 iOS [打印本页]

作者: 愛在花開的季節    时间: 2024-12-26 15:43
标题: App WebView白屏检测及解决总结,包括Android 和 iOS


App上WebView白屏


  1. 机型兼容造成
  2. JS语法兼容造成
  3. 网络加载获取数据造成
  4. 软件系统版本兼容造成
  5. 内存或者渲染进程造成
  6. android上疑难杂症
复制代码

  1. 网络加载获取数据造成
  2. 系统软件版本造成
  3. JS语言兼容造成
  4. 内存不足造成
复制代码
Android端白屏问题(APP侧解决方案)


  1. 使用了es6的语法对低版本未做兼容引入了三方外部插件,外部插件语法存在兼容性问题
  2. 语法错误造成页面无法渲染
复制代码

  1. // 解决对某些标签的不支持出现白屏
  2. webSettings.setDomStorageEnabled(true);
复制代码

  1. webView.setBackgroundColor(ContextCompat.getColor(this,android.R.color.transparent));
  2. webView.setBackgroundResource(R.color.black);//根据需求修改
复制代码

  1.  这种情况与获取的资源有关系,可以通过loading状态和箭听webviewClient方法进行处理
  2.  (这次主要调研基于业务的本地化内存造成的白屏)
复制代码
内存相干造成白屏


  1.   if (mWebView != null) {
  2.         mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); 
  3.         mWebView.clearHistory(); 
  4.         mLayout.removeView(mWebView); 
  5.          mWebView.destroy(); 
  6.          mWebView = null; 
  7.     } 
复制代码

  1.  监控webview的渲染进程状态
  2.  监测H5页面白屏页面
  3.  监测webview里的内存
  4.  
复制代码
1. 监控WebView渲染进程(适合项目应用)


  1. We use separate processes for browser tabs to protect the overall application from bugs and glitches in the rendering engine. We also restrict access from each rendering engine process to others and to the rest of the system. In some ways, this brings to web browsing the benefits that memory protection and access control brought to operating systems.
  2. We refer to the main process that runs the UI and manages tab and plugin processes as the "browser process" or "browser." Likewise, the tab-specific processes are called "render processes" or "renderers." The renderers use the Blink open-source layout engine for interpreting and laying out HTML.
复制代码

  1. 当检测到渲染进程被页面大内存消耗导致被杀或者异常终止时,
  2. 移除当前webview实例并消耗,否则新渲染进程会失效
  3. 通过新的实例加载出新的执行逻辑,可以reload页面或者其他业务逻辑, (而browser进程不死用户无感知)
  4. 防止当前reload页面如有大内存死循环,可能直接会被系统kill
  5. (要考虑到系统版本限制问题,并适用于X5WebView)
复制代码

2. 监控WebView页面白屏(适合数据采集)


  1. 对WebView在调用完成后进行截图
  2. 遍历截图的像素点的颜色值
  3. 设定白色像素点比例确认是否白屏
复制代码
3. 监测webview里的内存


Ios端WKWebView白屏


1. ios体系方案 (原理同Android上的RendProcess)


  1.  尝试在每次请求kWebview前清理缓存
  2.  webview reload
复制代码
2.白屏像素检测(非内存引起的,适合数据采集或必要reload)


  1. 通过获取截图
  2. 截图进行缩放
  3. 像素点进行遍历色值判断比例
复制代码

3.疑难问题白屏


Reload处理白屏


  1. 页面上大内存出现后,短时间内存回收不及时,造成reload后问题依然存在。
  2. reload前需要释放必要的内存资源,否则可能持续内存占用reload不能解决问题。
  3. 设置reload的最大重试次数,防止页面意外进入死循环
  4. 调试解决耗内存的原因,从根源上进行优化处理
复制代码

PS: 也欢迎各人批评和交流~ 更多文章也可关注微信公号:良技漫谈


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4