解决WebView内存泄漏【最干货】

欢迎关注微信公众号:FSA全栈行动 👋

解决 WebView 内存泄漏

要解决 WebView 内存泄漏的要点如下:

  • 不要使用 xml 方式创建,而是使用代码把 WebView 给 new 出来
  • 不要让 WebView 持有对 Activity/Fragment 的 Context 引用(核心)
  • 销毁时,停止 WebView 的加载,并从父控件中将其移除

1、初始化 WebView

WebView 内存泄露的主要原因是引用了 Activity/Fragment 的 Context,加之 WebView 本身的设计问题,导致 Activity/Fragment 无法被即时释放,既然 WebView 无法即时释放 Context,那就让它引用全局的 Context 就好了:

// 让 WebView 使用 ApplicationContext
val webview = WebView(this.applicationContext)

切记:不要在 xml 中使用 <WebView> 标签创建 WebView

2、销毁 WebView

为了保证 Activity/Fragment 界面销毁时,WebView 不要在后台继续进行没有意义的加载,并且避免父控件对 WebView 的引用导致发生意外泄露,需要进行如下 2 步:

  • 将 WebView 从其父控件中移除
  • 让 WebView 停止加载页面并释放
override fun onDestroy() {
    // webview?.loadDataWithBaseURL(null, "", "text/html", "utf-8", null)
    // webview?.clearView()
    webview?.loadUrl("about:blank")
    webview?.parent?.let {
        (it as ViewGroup).removeView(webview)
    }
    webview?.stopLoading()
    webview?.settings?.javaScriptEnabled = false
    webview?.clearHistory()
    webview?.clearCache(true)
    webview?.removeAllViewsInLayout()
    webview?.removeAllViews()
    webview?.webViewClient = null
    webview?.webChromeClient = null
    webview?.destroy()
    webview = null
    super.onDestroy()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值