【发布时间】:2011-09-15 16:26:11
【问题描述】:
我的应用程序中有一些活动访问了网络服务。由于我不想阻止主线程,因此此代码位于 AsyncTask 中。但是,我不希望用户在调用 Web 服务时操作 Activity,因此在执行 AsyncTask 之前,我会显示一个 ProgressDialog,它会旋转并阻止屏幕。在 AsyncTask 的 onPostExecute 方法中,我做的第一件事就是关闭 ProgressDialog。
这应该可以防止用户在不真正阻塞主线程的情况下操作 Activity。
但是,我注意到 ProgressDialog 有几次从不被关闭并且用户被卡住了。 AsyncTask 已完成,onPostExcute 已执行,但 ProgressDialog 仍显示。 ProgressDialog 永远不会被解雇,并且用户被卡在屏幕上。他们唯一的选择是访问 Android 设置应用程序并强制停止我的应用程序。
有人知道为什么会这样吗?我能做些什么来解决它?
相关代码:
这就是我显示 ProgressDialog 和启动任务的方式:
mProgress = ProgressDialog.show(this, "", "Syncing...", true);
(new MyAsyncTask()).execute(intUserId);
这是任务的 onPostExcute。没有“@Override”
protected void onPostExecute(Boolean result) {
if (mProgress != null) {
mProgress.dismiss();
mProgress = null;
}
}
【问题讨论】:
-
听起来像是调试器的工作
-
你能粘贴你正在使用的代码的相关部分吗?它有时与您正在关闭的对话框的实例有关。我的意思是,旋转手机之类的操作可能会导致重新创建一个新对话框,有时您会忽略对话框的另一个引用。
-
我已经用相关代码更新了主帖
-
使用
onPreExecute将进度对话框保持在AsyncTask内会更加清晰。
标签: android android-asynctask progressdialog