我的应用程序中有一些 Activity 访问了网络服务。因为我不想拖延主线程,所以这段代码在 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;
}
}
最佳答案
检查这个:
- 确保您在 UI 线程上调用了
asynctack.execute()
。 - 在
onPostExcute()
上使用 @Override 以确保它被正确定义。
关于android - AsyncTask onPostExecute 没有在主线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7434225/