Android窗口泄漏-活动泄漏了最初添加到此处的窗口

Android窗口泄漏-活动泄漏了最初添加到此处的窗口,android,multithreading,Android,Multithreading,我试图在线程的一侧显示ProgressDialog。但是当应用程序运行时,ProgressDialog将崩溃,并出现此异常 android.view.Window泄漏: Activity com.testApp.CaptureSignature已泄漏窗口 com.android.internal.policy.impl.PhoneWindow$DecorView{528dd504 最初添加到此处的V.E…..R…..I.0,0-949480} 执行行时获取错误 pDialog.show();

我试图在线程的一侧显示ProgressDialog。但是当应用程序运行时,ProgressDialog将崩溃,并出现此异常

android.view.Window泄漏: Activity com.testApp.CaptureSignature已泄漏窗口 com.android.internal.policy.impl.PhoneWindow$DecorView{528dd504 最初添加到此处的V.E…..R…..I.0,0-949480}

执行行时获取错误

pDialog.show();

public void syncing(final int sel){

        if(sel==1){
            ProgressDialo pDialog = new ProgressDialog(CaptureSignature.this);
            pDialog.setMax(100);
            pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            pDialog.setCancelable(false);
            pDialog.setProgress(0);
            pDialog.setOnDismissListener(new MyCustomDialog.OnDismissListener() {
                @Override
                public void onDismiss(final DialogInterface dialog) {
                    doaftersync(pDialog.getProgress(),sel);

                }

            }); 
            pDialog.setMessage("Syncing Deliveries.Please wait..");
            pDialog.show();
            Thread  background = new Thread (new Runnable() {
                   public void run() {

                       progressHandler.sendMessage(progressHandler.obtainMessage());


                       int stat = deliveryup();
                        if(stat==1){

                            try {
                                locationManager.removeUpdates(locationListner);
                            } catch (Exception e2) {
                            }

                        }else{
                            pDialog.dismiss();
                            return;

                        }

                        progressHandler.sendMessage(progressHandler.obtainMessage());
                         int isustat=issueup();
                            if(isustat==0){
                                pDialog.dismiss();
                                return;

                            }

                        progressHandler.sendMessage(progressHandler.obtainMessage());

                        int locstat=locationup();
                            if(locstat==0){
                                pDialog.dismiss();
                                return;

                            }

                        cleanup();

                        progressHandler.sendMessage(progressHandler.obtainMessage());
                        pDialog.dismiss();
                        return;
                   }
                });
             background.start();

        }

    }

    // handler for the background updating
    Handler progressHandler = new Handler() {
        public void handleMessage(Message msg) {
            pDialog.incrementProgressBy(25);
        }
    };

有什么帮助吗

在UI线程中执行所有UI操作

runOnUiThread(new Runnable() {

        @Override
        public void run() {
            pDialog.dismiss();
        }
    });

使用
Handler
或使用
runOnUiThread()
方法关闭主线程中的
ProgressDialog

您可能会遇到异常,因为当您的
活动
被销毁时,进度对话框正在运行。当
活动
被破坏时,您应该关闭对话框

我认为安全的方法是:

    if(dialog.isShowing()){
        dialog.dismiss();
    }

谢谢..我的活动是在进程对话框运行之前销毁这就是问题所在。