尝试关闭线程内的 ProgressDialog 时出现黑屏

Black Screen when trying to dismiss ProgressDialog inside a Thread

第一个问题是 ProgressDialog 没有显示。然后我读到我应该创建一个线程。我创建了线程并且它起作用了。但现在我不能关闭 ProgressDialog。应用崩溃,黑屏

xGrava.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        final ProgressDialog PD = ProgressDialog.show(NovaOcc.this,"","");
        PD.setContentView(R.layout.ipp_load);
        PD.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        Thread mThread = new Thread() {
            @Override
            public void run() {
                if (ValidaDados() == true) {
                    if (GravaDados() == true) {
                        xGrava.setVisibility(View.GONE);
                        PD.dismiss();
                    }
                }
            }
        };
        mThread.start();
    }
});

据我所见,我猜是 Android。 一般我们在有长进程到运行的时候使用Threads,不想让viewUI因为是UIThread运行ning而卡死。

所以要回答这个问题,请确保在视图上调用任何操作时,在“运行OnUIThread”上执行

例如这里,一旦您的 Thread 完成了“长”任务,您可以这样做:

xGrava.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final ProgressDialog PD = ProgressDialog.show(NovaOcc.this,"","");
            PD.setContentView(R.layout.ipp_load);
            PD.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
            Thread mThread = new Thread() {
                @Override
                public void run() {
                    if (ValidaDados() == true) {
                        if (GravaDados() == true) {
                            runOnUiThread(new Runnable() {
                                          @Override
                                           public void run() {
                                                xGrava.setVisibility(View.GONE);
                                                PD.dismiss();
                                           }
                                       }
                             );
                        }
                    }
                }
            };
            mThread.start();
        }
    });