ProgressDialog甚至没有显示我正在使用Thread执行任务

时间:2017-09-14 10:23:43

标签: android multithreading progressdialog

我有这个(在onCreate()方法中):

                    private ProgressDialog pDialog; //(this is in the header)
                    .
                    . 
                    .
                    //This is onCreate() method
                    pDialog=new ProgressDialog(MenuActivity.this);
                    pDialog.setMessage(getString(R.string.downloading));
                    pDialog.setCancelable(false);
                    ...some lines of code...
                    pDialog.show();
                    Thread thread = new Thread(new Runnable() {
                        @Override
                        public void run() {
                            resultados=timeConsumingTask();
                        }
                    });
                    thread.start();
                    try {
                        thread.join();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    if(resultados.contains(1)){
                        if(pDialog!=null){
                            if(pDialog.isShowing()){
                                pDialog.dismiss();
                            }
                        }
                        doSomething();
                    }else{
                        if(pDialog!=null){
                            if(pDialog.isShowing()){
                                pDialog.dismiss();
                            }
                        }
                        doOtherThing();
                    {

我已经看过每个教程和每个答案。他们每个人都说你必须做pDialog.show();就在耗时的任务之前,但显然我遗漏了一些东西,因为pDialog从未显示过。

你能帮我展示一下吗?并在if?

中解雇它

谢谢。

编辑:

可能与我调用show()方法以及FloatingActionButton的onClick()方法中的所有内容相关

2 个答案:

答案 0 :(得分:2)

要呈现任何UI部件活动,必须完成/完成OnCreate()函数调用。

由于您试图从同一功能显示和隐藏进度对话框,因此无法在屏幕上显示。

同样通过执行thread.join(),你阻止主要威胁,阻止OnCreate()完成并导致在onCreate()中显示和隐藏进度对话框

解决方案:尝试在没有thread.join()的情况下在线程上执行timeConsumingTask()并使用runOnUiThread()方法从线程本身隐藏progressDialog

答案 1 :(得分:1)

如果UI在某些时候被阻止,则不会显示对话框。

thread.join();行阻止了您的UI线程。

尝试使用AsyncTask而不是Thread,并将AsyncTask.onPostExecute()代码放在线程终止后执行的代码中。