考虑在Activity中启动的AsyncTask。如果活动暂停或销毁会发生什么? onPostExecute()会运行吗?如果是,将使用什么UI线程?
只是想知道。
非常感谢提前。
答案 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中调用取消函数,使其无异常。