Android ProgressDialog不';t使用Asynctask的多个实例排除
我在这个应用程序中有一个Asynctask,在onPreExecute中有一个ProgressDialogAndroid ProgressDialog不';t使用Asynctask的多个实例排除,android,android-asynctask,progressdialog,Android,Android Asynctask,Progressdialog,我在这个应用程序中有一个Asynctask,在onPreExecute中有一个ProgressDialog ProgressDialog pDialog; protected void onPreExecute() { pDialog = new ProgressDialog(Synchronization.this); pDialog.setMessage(Html.fromHtml("<b>Please Wait</b&g
ProgressDialog pDialog;
protected void onPreExecute() {
pDialog = new ProgressDialog(Synchronization.this);
pDialog.setMessage(Html.fromHtml("<b>Please Wait</b><br/>Working..."));
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
但在这里,我看到一个创建的进度对话框在onPostExecute之后关闭(我也可以看到我的视图在后台更新),但紧接着,另一个进度对话框弹出,不会关闭。
不确定是什么原因造成的。有人能帮忙吗?问题是,当您取消AsyncTask时,不会调用onPostExecute,而是调用onCanceled()。请参阅异步任务源
private void finish(Result result) {
if (isCancelled()) {
onCancelled(result);
} else {
onPostExecute(result);
}
mStatus = Status.FINISHED;
}
因此,您的进度对话框不会关闭,因为从未调用onPostExecute。将此项添加到异步任务中可以解决此问题:
@Override
protected void onCancelled()
{
// dismiss the dialog on canceled task
if(pDialog!=null && pDialog.isShowing())
pDialog.dismiss();
}
我不确定这是否导致您的问题,但请从
onPostExecute()
中删除runOnUiThread
。这是不必要的,因为onPostExecute()
在UI线程上运行,它可能会导致问题/混乱您在哪里定义ProgressDialog
?可能是这两个AsyncTask
s相互干扰,而第二个会覆盖第一个pDialog
引用吗?codemagic-我刚刚从代码中删除了runOnUiThread,但仍然是相同的行为。SimonSays-我尝试将其定义为实例变量以及AsyncTask的本地变量。不幸的是,这没什么区别。
private void finish(Result result) {
if (isCancelled()) {
onCancelled(result);
} else {
onPostExecute(result);
}
mStatus = Status.FINISHED;
}
@Override
protected void onCancelled()
{
// dismiss the dialog on canceled task
if(pDialog!=null && pDialog.isShowing())
pDialog.dismiss();
}