1

我使用leakcanary 来检测我的应用程序内存并发现一个包含webview 的Activity 泄漏。当我删除有关 WebView 的代码时,它检测到没有泄漏。但是,在添加 webview 的代码时,leakcanary 显示了一个非常奇怪的消息,例如这个泄漏消息。它显示了由 TextToSpeech 引起的泄漏,但实际上我没有使用这个类。我确定泄漏是由 WebView 引起的,所以我搜索了这个问题,发现它似乎是 Android 中的一个“著名”泄漏。我尝试了很多解决方案,但没有一个可以工作。这是我的 FaceWebViewActivity 中关于 WebView 的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_face_webview);

    webContainer = (RelativeLayout) findViewById(R.id.webview_container);

    webView = new WebView(this);
    webView.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    webContainer.addView(webView);

    // 初始化网页浏览器
    webView.requestFocus();
    webView.setWebChromeClient(new WebChromeClient());

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDefaultTextEncodingName("utf-8");

    webView.setHorizontalScrollBarEnabled(false);
    webView.setVerticalScrollBarEnabled(false);
}

@Override
protected void onResume() {
    super.onResume();
    webView.loadUrl(URL);
    webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url){
            webView.loadUrl("javascript:faceDraw()");
        }
    });
}

@Override
protected void onDestroy() {
    super.onDestroy();
    RefWatcher refWatcher = BaseApplication.getRefWatcher(this);
    refWatcher.watch(this);
    if (webView != null) {
        ViewGroup parent = (ViewGroup) webView.getParent();
        if (parent != null) {
            parent.removeView(webView);
        }
        webView.getSettings().setJavaScriptEnabled(false);
        webView.setWebChromeClient(null);
        webView.setWebViewClient(null);
        webView.setTag(null);
        webView.clearHistory();
        webView.removeAllViews();
        webView.destroy();
        webView = null;
    }
}

我用Java代码初始化了一个WebView,并没有在xml中添加它。在destroy 函数中,我将它从视图层次结构中删除,但leakcanary 仍然显示泄漏消息(我确定我的代码中没有使用TextToSpeech)。有人收到和我一样的泄密信息吗?您能否告诉我有关该消息的一些提示并帮助我摆脱它。

4

0 回答 0