You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebView导致MainActivity内存泄漏问题排查求助

我之前碰到过一模一样的问题!这个内存泄漏场景确实挺棘手的,尤其是跟着官方文档规范做了还是出问题,下面给你梳理下我了解到的细节:

问题确认与成因解析

这个问题属于Android系统WebView组件的内部Bug,和你按官方要求用Activity上下文实例化WebView的操作无关。从堆转储的引用链来看:

  • 核心症结在OnscreenContentProvider类——WebView内部会用到这个类,而它又依赖ClassLoaderContextWrapperFactory;
  • 关键是ClassLoaderContextWrapperFactory里存在两个静态的Context引用,当Activity被系统销毁时,这些静态引用不会被主动清除,导致旧的Activity实例一直被持有,无法被GC回收,最终造成内存泄漏。
稳定复现的步骤

按照下面的操作,你可以100%复现这个问题:

  • 打开设备开发者选项,开启**"Don't Keep Activities"**(这个选项会让Activity失去焦点后立即被系统销毁);
  • 启动包含WebView Fragment的目标Activity,等待WebView加载完成任意页面;
  • 跳转到应用内的另一个Activity(比如一个空白测试页);
  • 按返回键回到目标Activity,此时系统会重新创建该Activity实例;
  • 重复跳转-返回操作3-5次,然后通过Android Studio Profiler生成堆转储文件,分析后就能看到多个旧的Activity实例没有被回收,确认内存泄漏。
临时缓解方案(非根治)

因为是系统层面的Bug,除非Google修复WebView组件,否则没法彻底解决,但可以通过以下手段降低泄漏影响:

  • 在Activity的onDestroy()方法中,手动清理WebView资源:先把WebView从父布局中移除,再调用webView.destroy(),尽可能切断额外的引用链;
  • 如果业务场景允许,尝试用Application Context实例化WebView,但要注意这可能会引发WebView弹窗、权限请求等上下文相关的问题,需要全面测试验证。

内容的提问来源于stack exchange,提问作者David González

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:57:51