Skip to content

Commit f2c6255

Browse files
committed
Fix the memory leak of WebView.
1 parent 4afb8d6 commit f2c6255

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

TODO_list.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
6. 是否要支持ViewPager回弹问题
88
7. 是否要支持所有的View
99
8. 测试事件监听冲突问题
10-
9. 内存泄漏问题 -> 解决ValueAnimator潜在的内存泄漏问题;TODO 解决WebView泄漏问题
10+
9. 内存泄漏问题 -> 解决ValueAnimator潜在的内存泄漏问题;WebView内存泄漏问题;done
1111
10. 仿QQ视差效果
12+
11. 测试加载更多后不添加数据
1213

1314
## 新发现的问题
1415
1. beizierlayout主动调用刷新时会一片白

app/src/main/java/com/lcodecore/twinklingrefreshlayout/WebActivity.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.lcodecore.twinklingrefreshlayout;
22

3+
import android.annotation.SuppressLint;
34
import android.os.Handler;
45
import android.support.v7.app.AppCompatActivity;
56
import android.os.Bundle;
7+
import android.view.ViewGroup;
8+
import android.view.ViewParent;
69
import android.webkit.WebView;
710

811
import com.lcodecore.tkrefreshlayout.header.progresslayout.ProgressLayout;
@@ -13,6 +16,7 @@ public class WebActivity extends AppCompatActivity {
1316

1417
private WebView mWebView;
1518

19+
@SuppressLint("SetJavaScriptEnabled")
1620
@Override
1721
protected void onCreate(Bundle savedInstanceState) {
1822
super.onCreate(savedInstanceState);
@@ -27,7 +31,7 @@ protected void onCreate(Bundle savedInstanceState) {
2731
refreshLayout.setWaveHeight(240);
2832
refreshLayout.setOverScrollHeight(200);
2933
refreshLayout.setEnableLoadmore(false);
30-
header.setColorSchemeResources(R.color.Blue,R.color.Orange,R.color.Yellow,R.color.Green);
34+
header.setColorSchemeResources(R.color.Blue, R.color.Orange, R.color.Yellow, R.color.Green);
3135
// header.setColorSchemeColors(0xff4674e7,0xff0ba62c);
3236

3337
mWebView = (WebView) findViewById(R.id.webView);
@@ -61,10 +65,25 @@ protected void onResume() {
6165

6266
@Override
6367
protected void onDestroy() {
68+
destroyWebView();
69+
super.onDestroy();
70+
}
71+
72+
/**
73+
* 解决WebView持有mContext导致的内存泄漏问题
74+
*/
75+
private void destroyWebView() {
6476
if (mWebView != null) {
65-
mWebView.destroy();
66-
mWebView = null;
77+
ViewParent parent = mWebView.getParent();
78+
if (parent != null) ((ViewGroup) parent).removeView(mWebView);
79+
mWebView.stopLoading();
80+
mWebView.clearHistory();
81+
mWebView.clearView();
82+
mWebView.removeAllViews();
83+
try {
84+
mWebView.destroy();
85+
} catch (Throwable e) {
86+
}
6787
}
68-
super.onDestroy();
6988
}
7089
}

0 commit comments

Comments
 (0)