ProgressDialog 没有出现在 onProgressUpdate 方法中

ProgressDialog does not appear in method onProgressUpdate

在 Asyntask 中,我在 Asyntask 的全局变量中实例化了一个进度对话框:

ProgressDialog progressDialog;

然后,在 DoInBackGround 中,我调用 "publishProgress",因此调用了 onProgressUpdate。 在 onProgressUpdate 中,我有以下代码:

this.progressDialog=new ProgressDialog(mActivity);
                this.progressDialog.setCancelable(true);
                this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                this.progressDialog.setTitle("Iniciando la comunicación");
                this.progressDialog.show();

我不知道为什么,progressDialog 从未显示。我尝试在相同的上下文中使用 Toast,并且效果很好。虽然progressDialog没有。

---------更新-------------

最后,我通过通知解决了这个问题。

我两年前看到过这个问题。主 UI 线程交互时有一些不可预测的行为。 我找到的解决方案是使用 Thread 而不是 AsyncTack.

一个简单的例子:

new Thread(new Runnable() {
                    public void run() {

//background code to calculate
//for example
for(int i = 0; i < 100000000L; i++){
myHugeCalc(i);
final int prog = i;
runOnUiThread(new Runnable() {
                    public void run() {

                        pbtext.setText("My progress: " + prog);

                    }
                });
}

}).start();

还有另一种方法... 当您从 class 调用此同步过程时,开始在那里显示进度对话框,然后 onPostExecute 取消它。 它会做你的工作...... 但最佳做法是在 onPreExecute

中进行

像这样组织你的AsyncTask

private class YourTask extends AsyncTask<String, String, String> {
    ProgressDialog progressDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        ...
        // show the dialog
        this.progressDialog=new ProgressDialog(mActivity);
            this.progressDialog.setCancelable(true);
            this.progressDialog.setProgressStyle(ProgressDialog. STYLE_HORIZONTAL);
           //this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            this.progressDialog.setTitle("Iniciando la comunicación");
            this.progressDialog.show();
    }

    @Override
    protected String doInBackground(String... urls) {

        ...
        publishProgress("" + progress);
        ...
    }

    protected void onProgressUpdate(String... progress) {        
      progressDialog.setProgress(Integer.parseInt(progress[0]));
    }

    @Override
    protected void onPostExecute(String result) {
        // dismiss the dialog           
        progressDialog.dismiss();
        ...
    }
}

你还想 public 当 AsyncTask 是 运行 时的进度,所以你需要 STYLE_HORIZONTAL ProgressBar 而不是 STYLE_SPINNER ProgressBar

希望对您有所帮助