Android如何避免WebView内存泄漏
Android如何避免WebView内存泄漏
- 什么是内存泄漏
内存泄漏通俗的讲就是你创建了一个对象,却没有在合适的时候销毁他,他一直存在在内存中耗费了内存空间. - 为什么WebView会内存泄漏
webView内部的一些线程持有activity对象,导致activity无法释放。继而内存泄漏。 - 如何解决
不要在布局中直接初始化 webview,而是在需要的时候在 Activity 中动态创建 webview ,并且在创建 webview 时使用 Application 的上下文。
1.代码中创建WebView
如果是Xml创建的通过findViewById()加载的webView会一直存在,不能对其进行销毁所以我们因该在代码中创建webView代码如下
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建一个LayoutParams宽高设定为全屏
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
//创建WebView
mWebView = new WebView(getApplicationContext());
//设置WebView的宽高
mWebView.setLayoutParams(layoutParams);
//把webView添加到容器中
mLayout.addView(mWebView);
}
2.代码中销毁WebView
我们在代码中去创建webView就是为了方便之后在代码中对其进行销毁一般是在Activity销毁的时候,先把WebView加载Null内容,然后移除webView再销毁webView,最后置空,代码如下
@Override
protected void onDestroy() {
if (mWebView != null) {
//加载null内容
mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
//清除历史记录
mWebView.clearHistory();
//移除WebView
((ViewGroup) mWebView.getParent()).removeView(mWebView);
//销毁VebView
mWebView.destroy();
//WebView置为null
mWebView = null;
}
super.onDestroy();
}
参考:Android如何避免WebView内存泄漏
如何避免webview内存泄漏
Android开发经验谈:webview内存泄漏
还没有评论,来说两句吧...