我的应用程序中有一些活动会触及Web服务。由于我不想撑起主线程,所以这段代码在AsyncTask中。但是,我不希望用户在调用Web服务时操作Activity,因此在执行AsyncTask之前,我会显示一个ProgressDialog,它会旋转并阻止屏幕。在AsyncTask的onPostExecute方法中,我所做的第一件事是关闭ProgressDialog。AsyncTask onPostExecute没有在主线程上运行?
这应该阻止用户在不实际阻塞主线程的情况下操作活动。
但是,我已经注意到ProgressDialog是的几次,从来没有被解雇,并且用户被卡住了。 AsyncTask已完成,onPostExcute已执行,但ProgressDialog仍显示。 ProgressDialog没有机会被解雇,用户被困在屏幕上。他们唯一的选择是访问Android设置应用程序并强制停止我的应用程序。
有没有人有任何想法,为什么会发生这种情况?我能做些什么来解决它?
相关代码:
我这是怎么显示ProgressDialog和启动任务:
mProgress = ProgressDialog.show(this, "", "Syncing...", true);
(new MyAsyncTask()).execute(intUserId);
这是onPostExcute的任务。没有 “@覆盖”
protected void onPostExecute(Boolean result) {
if (mProgress != null) {
mProgress.dismiss();
mProgress = null;
}
}
听起来像是调试 –
职位,您可以粘贴您正在使用的代码的相关部分?它有时与您所忽视的对话框的实例有关。我的意思是,像旋转手机这样的东西可能会导致重新创建一个新的对话框,有时候你会忽略对话框的另一个参考。 – Cristian
也看到这篇文章:http://stackoverflow.com/questions/3821423/background-task-progress-dialog-orientation-change-is-there-any-100-working –