博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决WebView内存泄漏【最干货】
阅读量:1979 次
发布时间:2019-04-27

本文共 1168 字,大约阅读时间需要 3 分钟。

欢迎关注微信公众号:

解决 WebView 内存泄漏

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

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

1、初始化 WebView

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

// 让 WebView 使用 ApplicationContextval 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()}

转载地址:http://zphpf.baihongyu.com/

你可能感兴趣的文章
java 解析json
查看>>
java http请求
查看>>
tensorflow 数据格式
查看>>
tf rnn layer
查看>>
tf input layer
查看>>
tf model create
查看>>
tf dense layer两种创建方式的对比和numpy实现
查看>>
tf initializer
查看>>
tf 从RNN到BERT
查看>>
tf keras SimpleRNN源码解析
查看>>
tf keras Dense源码解析
查看>>
tf rnn输入输出的维度和权重的维度
查看>>
检验是否服从同一分布
查看>>
tf callbacks
查看>>
keras、tf、numpy实现logloss对比
查看>>
Ubuntu20.04安装微信
查看>>
Restful风格的使用
查看>>
Swagger基础入门整合SpringBoot
查看>>
MyBatisPlus简单入门(SpringBoot)
查看>>
攻防世界web进阶区NewsCenter详解
查看>>