Android 从Fragment中的FrameLayout动态添加和删除WebView会导致内存泄漏(增长堆(frag案例))
我很抱歉,如果这是重复的问题,我谷歌了1天,但仍然没有找到理想的解决方案。因为我想保留WebView的所有状态(javascript环境、显示页面…),所以我在应用程序类中声明我的WebView,如下所示Android 从Fragment中的FrameLayout动态添加和删除WebView会导致内存泄漏(增长堆(frag案例)),android,android-fragments,memory-leaks,webview,Android,Android Fragments,Memory Leaks,Webview,我很抱歉,如果这是重复的问题,我谷歌了1天,但仍然没有找到理想的解决方案。因为我想保留WebView的所有状态(javascript环境、显示页面…),所以我在应用程序类中声明我的WebView,如下所示 public class RAPINaviMainApplication extends Application { private WebView mWebView = null; private boolean isWebViewInitialized = false;
public class RAPINaviMainApplication extends Application {
private WebView mWebView = null;
private boolean isWebViewInitialized = false;
@Override
public void onCreate () {
super.onCreate();
mWebView = new WebView(getApplicationContext());
isWebViewInitialized = false; // we do some initialization once in our activity.
mWebView.setWebViewClient(new WebViewClient());
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
mWebView.getSettings().setJavaScriptEnabled(true);
}
public boolean isWebViewInitialized() {
return isWebViewInitialized;
}
public void setWebViewInitialized(boolean initialize) {
isWebViewInitialized = initialize;
}
public WebView getWebView() {
return mWebView;
}
}
然后我在RapiNavimain片段中动态添加webview,以便在用户选择Naviagtion抽屉(Android导航抽屉模板)中的片段时显示其内容,如下所示
问题是,当用户从其他片段切换到RapiNavimain片段(通过选择导航抽屉中的项)或用户在webview中加载新网站时,我从logcat接收内存泄漏信息
07-26 14:11:31.371: I/dalvikvm-heap(10391): Grow heap (frag case) to 12.937MB for 6317296-byte allocation
07-26 14:11:34.825: I/RAPINaviMainFragment(10391): RAPINaviMainFragment:entered onPause()
07-26 14:11:37.578: I/RAPINaviMainFragment(10391): RAPINaviMainFragment:entered onAttach()
07-26 14:11:37.578: I/RAPINaviMainFragment(10391): RAPINaviMainFragment:entered onResume()
07-26 14:11:37.618: I/dalvikvm-heap(10391): Grow heap (frag case) to 12.936MB for 6317296-byte allocation
07-26 14:12:42.167: I/RAPINaviMainFragment(10391): RAPINaviMainFragment:entered onPause()
我还在AndroidManifest.xml中设置了follow选项
android:largeHeap="true"
当我从FrameLayout评论addView()和removeView()操作时,没有内存泄漏。我还尝试使用WeakReference来访问WebView应用程序,但问题仍然存在。如果有人知道这个问题的根源并给我解决方法,我真的很感激 问题在于下面的陈述
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
拆下它,然后问题就解决了
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);