Webview黑白屏问题

1. 如何获取Android Webview内存占用情况

  • 执行shelladb shell dumpsys meminfo
adb shell dumpsys meminfo 查看所有内存
 //324,594K: Foreground
 //251,689K: com.dd.xxxxxxxxx (pid 3078 / activities)
 //51,506K: com.google.android.webview:sandboxed_process7 (pid 17055)
  • 搜索Foreground 或者你的应用pakagename,下面会跟着webview的进程
image-20200810160958338
  • 查看webview进程所使用的内存
adb shell dumpsys meminfo com.google.android.webview:sandboxed_process7 
或者
adb shell dumpsys meminfo 17055
image-20200803184842629

2. 如何获取iOS Webview内存占用情况

  • iOS使用Xcode工具 Activity Monitor检测webview的内存使用
  • 检索出输入webkit.即可看到当前运行的webview
企业微信截图_fce93a71-3407-451c-a3e0-48149c57b413
企业微信截图_544ce216-1b32-41d5-a449-0abf8f5efe33

3. webview为什么会崩溃

  • 从以上Android & iOS获取webview耗费的内存,我们可以定位到当webview内存超过一定限制的时候系统或强杀webview占据的进程。
  • 因为Android每次都需要脚本执行获取内存,使用iOS webview的监测工具可以更直观的看到内存变动
  • iOS内存监控采用Jetsam,原理可以查看 iOS内存abort(Jetsam)原理探究

4. 为什么app没有崩溃

  • Linux内核进程的创建都是通过fork出子进程,每个子进程都是单独运行的
  • 推荐阅读《深入理解Android卷一》第4章 深入理解zygote
  • 推荐阅读《程序员的自我修养—链接、装载与库》第1章 Linux多线程

5. webview内存偏高的原因

  • webview展示&绘制的图片过大,图片或者龙骨动画的size要管控
  • webGL绘制出现离屏渲染,控制绘制区域
  • webview频繁的音效&视频播放,native可以接管音效播放

6. 如何解决

  • 图片或者龙骨动画的size要管控
  • webGL避免离屏渲染
  • native接管音效&视频播放
  • 监听webview的奔溃回调重复拉起,但是要注意死循环
  • Android可以采用腾讯X5的方案,X5避免了开启多个webview进程

你可能感兴趣的:(Webview黑白屏问题)