onPostExecute()的“在UI线程上运行”究竟意味着什么?

时间:2012-05-21 13:23:41

标签: android android-activity android-asynctask

考虑在Activity中启动的AsyncTask。如果活动暂停或销毁会发生什么? onPostExecute()会运行吗?如果是,将使用什么UI线程?

只是想知道。

非常感谢提前。

3 个答案:

答案 0 :(得分:11)

UI线程在应用程序的整个可见生命周期中都可用,可能跨越多个活动的组合。

您在视图中更改的任何内容都必须在UI线程上执行,而 AsyncTask onPostExecute 通过执行UI线程内的指令来反映相同的逻辑。

您可以在自己的Thread中使用 runOnUiThread 对视图进行更改。但由于 AsyncTask 具有 onPostExecute 方法(也可以在UI线程上运行),因此您在逻辑上不需要在那里使用 runOnUiThread


<强>更新

关于你的问题:是的, onPostExecute 仍将被调用(因为它由一个单独的线程调用),即使你的活动被破坏,如果该方法将操纵视图,你只需要< strong>强制关闭错误,因为您的活动的引用不再可用。

答案 1 :(得分:1)

它会在onPostExecute()中崩溃,因为UI线程就像进程对话框一样。它发生在我身上,在我的Asynctask完成之前我的Activity销毁了。它说“窗口泄露.....”所以,我删除了onPostExecute()。没有更多的崩溃..

答案 2 :(得分:0)

请记住在onPause或onDestroyed中调用取消函数,使其无异常。