Android如何避免WebView内存泄漏

逃离我推掉我的手 2023-06-09 13:24 40阅读 0赞

Android如何避免WebView内存泄漏

  • 什么是内存泄漏
    内存泄漏通俗的讲就是你创建了一个对象,却没有在合适的时候销毁他,他一直存在在内存中耗费了内存空间.
  • 为什么WebView会内存泄漏
    webView内部的一些线程持有activity对象,导致activity无法释放。继而内存泄漏。
  • 如何解决
    不要在布局中直接初始化 webview,而是在需要的时候在 Activity 中动态创建 webview ,并且在创建 webview 时使用 Application 的上下文。

1.代码中创建WebView

如果是Xml创建的通过findViewById()加载的webView会一直存在,不能对其进行销毁所以我们因该在代码中创建webView代码如下

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. //创建一个LayoutParams宽高设定为全屏
  6. LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
  7. //创建WebView
  8. mWebView = new WebView(getApplicationContext());
  9. //设置WebView的宽高
  10. mWebView.setLayoutParams(layoutParams);
  11. //把webView添加到容器中
  12. mLayout.addView(mWebView);
  13. }

2.代码中销毁WebView

我们在代码中去创建webView就是为了方便之后在代码中对其进行销毁一般是在Activity销毁的时候,先把WebView加载Null内容,然后移除webView再销毁webView,最后置空,代码如下

  1. @Override
  2. protected void onDestroy() {
  3. if (mWebView != null) {
  4. //加载null内容
  5. mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
  6. //清除历史记录
  7. mWebView.clearHistory();
  8. //移除WebView
  9. ((ViewGroup) mWebView.getParent()).removeView(mWebView);
  10. //销毁VebView
  11. mWebView.destroy();
  12. //WebView置为null
  13. mWebView = null;
  14. }
  15. super.onDestroy();
  16. }

参考:Android如何避免WebView内存泄漏
如何避免webview内存泄漏
Android开发经验谈:webview内存泄漏

发表评论

表情:
评论列表 (有 0 条评论,40人围观)

还没有评论,来说两句吧...

相关阅读

    相关 如何避免JS内存泄漏

    简介: 很多开发者可能平时并不关心自己维护的页面是否存在内存泄漏,原因可能是刚开始简单的页面内存泄漏的速度很缓慢,在造成严重卡顿之前可能就被用户刷新了,问题也就被隐藏了,但是随