3

我正在从我的 UI 线程(在我的 Activity 的 onCreate() 处理程序中)实例化并执行一个 AsyncTask。我保证 Activity 不会由于配置更改而重新启动(例如,它会忽略方向更改)。

在我的 Activity.onCreate() 中:我使用 asynctask.execute(),然后 UI 线程做一些工作,然后在 Activity.onCreate() 结束之前调用 asynctask.get(...) 进行同步。

根据日志,我的 asynctask.onPostExecute() 在 asynctask.get() 返回后被调用 很长时间。更准确地说,在 Activity.onResume (!) 返回后调用 onPostExecute。(所以它确实被调用了,我的方法定义没问题,我也使用@Override。)

我在某处读到,由于 onPostExecute() 在 UI 线程的处理程序中发布,UI 线程必须为它做好准备——为什么在这种情况下它还没有准备好?我的应用程序从方向更改开始,但由于我在清单中的设置,它不会导致任何配置更改。

是否有任何保证何时会相对于asynctask.get() 调用 onPostExecute() ?

4

1 回答 1

3

根据日志,我的 asynctask.onPostExecute() 在 asynctask.get() 返回后被调用了很长时间。更准确地说,在 Activity.onResume (!) 返回后调用 onPostExecute。

get()doInBackground()根据我对源代码的阅读,只等待完成。

是否有任何保证何时会相对于 asynctask.get() 调用 onPostExecute() ?

onPostExecute()get()根据我对源代码的阅读,将在返回后的某个时间调用。但是,这不是“保证”,因为这种行为是无证的,因此可能会发生变化。

于 2012-05-05T12:01:27.603 回答