Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从Fragment中的FrameLayout动态添加和删除WebView会导致内存泄漏(增长堆(frag案例))_Android_Android Fragments_Memory Leaks_Webview - Fatal编程技术网

Android 从Fragment中的FrameLayout动态添加和删除WebView会导致内存泄漏(增长堆(frag案例))

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;

我很抱歉,如果这是重复的问题,我谷歌了1天,但仍然没有找到理想的解决方案。因为我想保留WebView的所有状态(javascript环境、显示页面…),所以我在应用程序类中声明我的WebView,如下所示

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);