12

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

就是想。

提前谢谢了。

4

3 回答 3

12

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

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

您可以自己使用runOnUiThreadThread对视图进行更改。但是由于AsyncTaskonPostExecute方法(它也在 UI 线程上运行),所以你在逻辑上不需要在那里使用runOnUiThread


更新

关于您的问题:是的,即使您的活动被破坏并且该方法将操纵视图,onPostExecute仍将被调用(因为它由单独的线程调用),您将简单地得到强制关闭错误,因为对您的活动的引用不可用了。

于 2012-05-21T13:30:11.250 回答
1

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

于 2012-05-21T14:38:47.203 回答
0

请记住调用取消函数以避免 onPause 或 onDestroyed 出现异常。

于 2012-05-21T14:07:02.040 回答