android - AsyncTask onPostExecute 没有在主线程上运行?

标签 android android-asynctask progressdialog

我的应用程序中有一些 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;
        }
    }

最佳答案

检查这个:

  1. 确保您在 UI 线程上调用了 asynctack.execute()
  2. onPostExcute() 上使用 @Override 以确保它被正确定义。

关于android - AsyncTask onPostExecute 没有在主线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7434225/

相关文章:

android - 如何在范围内自动连接 BLE 设备?

Android strace(或任何 linux 二进制文件)执行

Android - Lollipop Screen 固定是否适用于同一应用程序中的多个 Activity ?

java - 将 Android ProgressDialog 与 AsyncTask 和奇怪的 Activity 生命周期一起使用

android - 正确关闭进度对话框

android - ProgressDialog 没有出现在 AsyncTask 中

Android 跨应用传递数据

java - 取消 asyncTask 成本昂贵吗?

android - 如何将变量从 AsyncTask 类返回到 fragment

android - 使用 AsyncTask 将图像加载到 Textview