onPostExecute没有执行; doInBackground正常工作

时间:2013-10-15 21:21:38

标签: java android

我已经阅读了很多关于这个主题的类似帖子,没有人帮助过我。

我有一个正在执行其工作的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方法工作得很好。我已经完成了日志记录(在返回语句之前)以证明它正常运行。

ParseResult类很简单,也证明工作正常。

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

任何建议都会受到欢迎,因为我正在肆无忌惮地抨击并且无法到达任何地方。

感谢。

修改

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

再次感谢您的帮助。

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

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

3 个答案:

答案 0 :(得分:1)

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

因此,一旦我删除了调试代码,事情就开始重新开始了。

谢谢大家的帮助和时间。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我认为,这种行为的发生是因为你删除了对超类方法的调用。在onPostExecute的代码之上添加此语句,一切都应该没问题了:

super.onPostExecute(result);