1

为什么对话框不能与线程并行工作?使用此代码,活动冻结和进度对话框不显示...我需要在下载文件期间显示进度对话框...

在 onCreate 中:

pDialog = new ProgressDialog(this);
        pDialog.setIndeterminate(true);
        pDialog.setCancelable(false);
        pDialog.setTitle(null);
        pDialog.setMessage(getString(R.string.loading));

在下载方法中:

startReader = true;
        pDialog.show();
        new Thread(new Runnable(){
            public void run(){
                for(int i = 1; i <= Integer.parseInt(pages); i++){
                    try{
                        if(!isCached(code,i)){
                            try{
                                CODE TO DOWNLOAD THE FILE;
                                Log.d(TAG, "File downloaded: /"+ code + "/" + "pg" + i + ".rsc");
                            }catch(IOException e){
                                runOnUiThread(new Runnable(){
                                    public void run(){
                                        Toast.makeText(getApplicationContext(), getString(R.string.reader_errinternetcon), Toast.LENGTH_SHORT).show();
                                    }
                                });
                            }
                        }                       
                    }catch(Exception e){
                        runOnUiThread(new Runnable(){
                            public void run(){
                                Toast.makeText(getApplicationContext(),"Error", Toast.LENGTH_SHORT).show();
                            }
                        });
                        startReader = false;
                        break;
                    }
                }
                if(startReader){
                    runOnUiThread(new Runnable(){
                        public void run(){
                            Intent intent = new Intent(MainActivity.this, ReaderActivity.class);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            intent.putExtra("Pages", pages);
                            intent.putExtra("Code", code);
                            getApplicationContext().startActivity(intent);
                        }
                    });
                }
            }
        }).start();
        pDialog.dismiss();  
4

1 回答 1

2

Thread.start()启动线程但不等待它完成。之后您立即关闭对话。这就是您看不到进度对话框的原因。

我建议您将后台线程设为AsyncTask. 在 中设置进度对话框,在onPreExecute()中进行后台线程处理doInBackground()并进行 UI 线程后处理,例如在 中关闭进度对话框onPostExecute()

于 2013-09-09T16:50:52.260 回答