我在我的应用程序中有几个与 web 服务交互的活动。由于我不想阻塞主线程,所以这段代码在 AsyncTask 中实现。但是,在调用 Web 服务之前,我不希望用户操作 Activity,因此我会显示一个旋转并阻止屏幕的 ProgressDialog。在 AsyncTask 的 onPostExecute 方法中,我首先会关闭 ProgressDialog。
这样做可以防止用户操纵 Activity,而无需实际阻塞主线程。
然而,我注意到有一些情况下 ProgressDialog 没有被关闭,用户就进入了困境。AsyncTask 已经完成,onPostExecute 已经执行,但是 ProgressDialog 仍然显示。ProgressDialog 没有任何机会被关闭,用户被困在屏幕上。他们唯一的选择是访问 Android 设置应用程序并强制停止我的应用程序。
有人知道为什么会发生这种情况吗?我该怎么办才能解决这个问题?
相关代码:
以下是如何显示 ProgressDialog 并启动任务:
这样做可以防止用户操纵 Activity,而无需实际阻塞主线程。
然而,我注意到有一些情况下 ProgressDialog 没有被关闭,用户就进入了困境。AsyncTask 已经完成,onPostExecute 已经执行,但是 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;
}
}
AsyncTask
中使用onPreExecute
来显示进度对话框,这样可以使代码更加简洁。 - Che Jami