我已经阅读了很多关于这个主题的类似帖子,没有人帮助过我。
我有一个正在执行其工作的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都没有被执行。
答案 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);