1. 如何获取Android Webview内存占用情况
- 执行shell
adb 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的进程
adb shell dumpsys meminfo com.google.android.webview:sandboxed_process7
或者
adb shell dumpsys meminfo 17055
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进程