Android项目中WebView的内存泄漏

Android项目中WebView的内存泄漏,android,memory-leaks,Android,Memory Leaks,我正在将一个java项目应用到Android项目中。java项目使用来自Android项目的Activity对象的引用当我调用java项目上的函数时,我发送Activity引用。到目前为止还可以,但有时会出现错误。这是内存泄漏: 09-09 20:54:38.496: E/WindowManager(15895): android.view.WindowLeaked: Activity com.test.android.MainActivity has leaked window com

我正在将一个java项目应用到Android项目中。java项目使用来自Android项目的Activity对象的引用当我调用java项目上的函数时,我发送Activity引用。到目前为止还可以,但有时会出现错误。这是内存泄漏:

    09-09 20:54:38.496: E/WindowManager(15895): android.view.WindowLeaked: Activity com.test.android.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{425c0468 V.E..... R.....I. 0,0-720,1280} that was originally added here
09-09 20:54:38.496: E/WindowManager(15895):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:467)
09-09 20:54:38.496: E/WindowManager(15895):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:267)
09-09 20:54:38.496: E/WindowManager(15895):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
09-09 20:54:38.496: E/WindowManager(15895):     at android.app.Dialog.show(Dialog.java:289)
09-09 20:54:38.496: E/WindowManager(15895):     at com.test.AppBase$5.run(AppBase.java:210)
09-09 20:54:38.496: E/WindowManager(15895):     at android.app.Activity.runOnUiThread(Activity.java:4924)
09-09 20:54:38.496: E/WindowManager(15895):     at com.test.AppBase.setVisibility(AppBase.java:197)
09-09 20:54:38.496: E/WindowManager(15895):     at com.test.AppBase.callSmth(AppBase.java:140)
09-09 20:54:38.496: E/WindowManager(15895):     at com.test.AppBase.callSmth(AppBase.java:156)
09-09 20:54:38.496: E/WindowManager(15895):     at com.test.android.MainActivity.onClick(MainActivity.java:47)
09-09 20:54:38.496: E/WindowManager(15895):     at android.view.View.performClick(View.java:4654)
09-09 20:54:38.496: E/WindowManager(15895):     at android.view.View$PerformClick.run(View.java:19438)
09-09 20:54:38.496: E/WindowManager(15895):     at android.os.Handler.handleCallback(Handler.java:733)
09-09 20:54:38.496: E/WindowManager(15895):     at android.os.Handler.dispatchMessage(Handler.java:95)
09-09 20:54:38.496: E/WindowManager(15895):     at android.os.Looper.loop(Looper.java:146)
09-09 20:54:38.496: E/WindowManager(15895):     at android.app.ActivityThread.main(ActivityThread.java:5602)
09-09 20:54:38.496: E/WindowManager(15895):     at java.lang.reflect.Method.invokeNative(Native Method)
09-09 20:54:38.496: E/WindowManager(15895):     at java.lang.reflect.Method.invoke(Method.java:515)
09-09 20:54:38.496: E/WindowManager(15895):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
09-09 20:54:38.496: E/WindowManager(15895):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
09-09 20:54:38.496: E/WindowManager(15895):     at dalvik.system.NativeStart.main(Native Method)
我也搜索过了,发现这不是开发者的错,但我不知道这两者是否有联系。堆栈跟踪中没有太多细节,但在上面的一个跟踪中,我的代码肯定是这样的

我不知道;i don’我不知道现在要尝试什么,我应该不从主线程显示webview吗

mActivity.runOnUiThread(new Runnable() {
                public void run() {
                    mWebView = MyWebViewFactory.create(mActivity, "");
                    dialog = MyWebViewFactory.showWebView(mActivity, mWebView);
                }
            });

谢谢

mActivity.runOnUiThread(new Runnable() {
                public void run() {
                    mWebView = MyWebViewFactory.create(mActivity, "");
                    dialog = MyWebViewFactory.showWebView(mActivity, mWebView);
                }
            });
public static Dialog showWebView(final Activity context, final WebView webView) {
        Dialog callAlert = new Dialog(context,
                android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setLoadsImagesAutomatically(true);

        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        callAlert.requestWindowFeature(Window.FEATURE_NO_TITLE);
        Window window = callAlert.getWindow();
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        callAlert.setCanceledOnTouchOutside(true);
        callAlert.setContentView(webView);
        callAlert.getWindow().setBackgroundDrawable(
                new ColorDrawable(android.graphics.Color.TRANSPARENT));
        callAlert.getWindow().setLayout(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT);
        callAlert.getWindow().setFormat(PixelFormat.TRANSLUCENT);
        callAlert.setCancelable(true);
        return callAlert;
    }