WebView内存泄露终结解决方案

但凡是做Android开发的相信都对webview不会陌生,而且也对系统自带的webview本身存在的问题也是怨念很久了,一方面是本身对js的支持不是很好另外一方面就是经常被人诟病的内存泄露了。

不知道各位遇到同样问题的朋友是怎么解决的,网上也有很多解析和方案但至少在我的项目中是没任何效果的,今天我就分享一下我最终是怎么解决这些问题的(其实是很蠢的一个办法)。

需求背景:
需要一个带有加载进度条的webview来正常的显示合作方和自己的web页面。

1、解决webview对一些js的支持:

1
2
用JsBridge代替系统原生的webview,
github地址:https://github.com/lzyzsd/JsBridge

2、解决webview内存泄露:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@Bind(R.id.pb)
ProgressBar pb;
@Bind(R.id.mWebView)
BridgeWebView mWebView;

pb.setMax(100);
mWebView.setWebChromeClient(new WebViewClient());
mWebView.loadUrl(strWebsite);

private class WebViewClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
try {
pb.setProgress(newProgress);
if (newProgress == 100) {
pb.setVisibility(View.GONE);
}
} catch (Exception e) {
e.printStackTrace();
}
super.onProgressChanged(view, newProgress);
}
}

@Override
protected void onDestroy() {
super.onDestroy();
try {
if (mWebView != null) {
mWebView.removeAllViews();
mWebView.destroy();
mWebView = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}

最后介绍大家一个用来检测应用内存泄露的工具:leakcanary

github地址:https://github.com/square/leakcanary


FullStackEngineer的公众号,更多分享

Share Comments