1

我已经阅读了许多关于这个主题的类似帖子,但没有一个对我有帮助。

我有一个 AsynkTask 类,它的工作执行得很好,但由于某种原因,onPostExecute 方法永远不会执行。

这是我正在使用的代码:

public class MyPublicClass
{
    private class MonitorAudioTask extends AsyncTask<Void, Void, ParseResult>
    {
        @Override
        protected ParseResult doInBackground(Void... params)
        {
            // set variables
            ParseResult result = null;

            // do stuff
            return result;
        }

        @Override
        protected void onPostExecute(ParseResult result)
        {
            if (result != null)
            {
                // deal with result
            }

            //Now start the task again
            _task = new MonitorAudioTask();
            _task.execute(null, null, null);
        }
    }
}

同样,doInBackground 方法运行良好。我已经在它的最后(就在 return 语句之前)完成了日志记录,以证明它运行正常。

ParseResult 类非常简单,也被证明可以正常工作。

我已经证明 onPostExecute 没有通过在该方法的第一行进行圆顶调试日志记录来执行。

任何建议都会受到欢迎,因为我现在正猛烈抨击我的脑袋,却一无所获。

谢谢。

编辑

我还应该提到,我从以前的开发人员那里接手了这个应用程序的开发。而这个应用程序曾经可以正常工作。它工作和不工作之间发生了两件事:1)我对从 doInBackground() 方法中调用的函数进行了一些小的调整。2)看起来以前的开发人员正在开发旧版本的 ADT(JellyBean 4.1.2),而我已经安装了最新版本:4.3。

再次感谢您的帮助。

更新:我刚刚更新了我的 ADT 以拥有 4.1.2 SDK,因此我可以在以前的程序员使用的相同版本上进行开发。我再次进行了测试,几乎同样的事情发生了。唯一的区别是最终我收到了来自应用程序的“应用程序没有响应”消息。所以看起来 doInBackground() 正在返回它的输出,但这有点让应用程序崩溃。这有助于解释发生在我身上的事情吗?

更新:我刚刚运行了另一个,我将所有调试调用都移到了 onProgress() 方法中。我想确保我的调试代码不会妨碍我。有趣的结果:没有进行任何调试调用。所以看起来 onProgress 和 onPostExecute 都没有被执行。

4

3 回答 3

1

终于找到了我的问题:我在 onPostExecute() 方法的第一行进行了调试调用。问题是这个特定的调试调用会进行 Web 服务调用以将消息发布到我的服务器。显然,在 onPostExecute() 方法中不允许使用这些类型的调用。

所以一旦我删除了我的调试代码,事情又开始工作了。

感谢大家的帮助和时间。

于 2013-10-28T22:15:59.377 回答
0

您正在使用哪个版本的 Android?如果是 Pre JellyBean,则需要从 UI Thread 执行 AsyncTask。从 JB 开始,AsyncTask 由框架加载到 UI 线程中。

如果您没有在 UI 线程中加载 AsyncTask,则不会调用 onPostExecute。如果任务被取消,可能onPostExecute不会调用其他原因。

于 2013-10-15T22:11:08.023 回答
0

我认为,发生这种行为是因为您删除了对超类方法的调用。在 onPostExecute 代码的顶部添加此语句,一切都应该再次正常:

super.onPostExecute(result);
于 2013-10-15T23:38:10.373 回答