1. 如何獲取Android Webview內(nèi)存占用情況
- 執(zhí)行shell
adb shell dumpsys meminfo
adb shell dumpsys meminfo 查看所有內(nèi)存
//324,594K: Foreground
//251,689K: com.dd.xxxxxxxxx (pid 3078 / activities)
//51,506K: com.google.android.webview:sandboxed_process7 (pid 17055)
- 搜索
Foreground
或者你的應(yīng)用pakagename
,下面會跟著webview的進(jìn)程
- 查看webview進(jìn)程所使用的內(nèi)存
adb shell dumpsys meminfo com.google.android.webview:sandboxed_process7
或者
adb shell dumpsys meminfo 17055
2. 如何獲取iOS Webview內(nèi)存占用情況
- iOS使用Xcode工具 Activity Monitor檢測webview的內(nèi)存使用
- 檢索出輸入
webkit.
即可看到當(dāng)前運(yùn)行的webview
企業(yè)微信截圖_fce93a71-3407-451c-a3e0-48149c57b413
企業(yè)微信截圖_544ce216-1b32-41d5-a449-0abf8f5efe33
3. webview為什么會崩潰
- 從以上Android & iOS獲取webview耗費(fèi)的內(nèi)存,我們可以定位到當(dāng)webview內(nèi)存超過一定限制的時候系統(tǒng)或強(qiáng)殺webview占據(jù)的進(jìn)程。
- 因為Android每次都需要腳本執(zhí)行獲取內(nèi)存吓歇,使用iOS webview的監(jiān)測工具可以更直觀的看到內(nèi)存變動
- iOS內(nèi)存監(jiān)控采用Jetsam,原理可以查看 iOS內(nèi)存abort(Jetsam)原理探究
4. 為什么app沒有崩潰
- Linux內(nèi)核進(jìn)程的創(chuàng)建都是通過fork出子進(jìn)程局劲,每個子進(jìn)程都是單獨運(yùn)行的
- 推薦閱讀《深入理解Android卷一》第4章 深入理解zygote
- 推薦閱讀《程序員的自我修養(yǎng)—鏈接侧到、裝載與庫》第1章 Linux多線程
5. webview內(nèi)存偏高的原因
- webview展示&繪制的圖片過大恰梢,圖片或者龍骨動畫的size要管控
- webGL繪制出現(xiàn)離屏渲染般卑,控制繪制區(qū)域
- webview頻繁的音效&視頻播放藻烤,native可以接管音效播放
6. 如何解決
- 圖片或者龍骨動畫的size要管控
- webGL避免離屏渲染
- native接管音效&視頻播放
- 監(jiān)聽webview的奔潰回調(diào)重復(fù)拉起绷雏,但是要注意死循環(huán)
- Android可以采用騰訊X5的方案,X5避免了開啟多個webview進(jìn)程
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者