2016-09-16 50 views
-1

如何在片段生命周期中启动AsyncTask如果我需要onCreateView()onPostExecute()之前运行?我知道我可以在onCreateView()中启动AsyncTask,但我想知道是否有任何担保,在交付任何完成的后台任务之前,UI线程将达到某个点。是什么导致UI线程在完成时转换到AsyncTask?在创建视图之前,我可以在片段中启动AsyncTask吗?

+0

onAttach()和onCreate()在onCreateView()之前开始 – XxGoliathusxX

回答

1

我多早可以开始在片段生命周期

一个的AsyncTask你就可以开始在OnCreate()中的AsyncTask,但它并不重要。

是什么导致UI线程在完成时转换到AsyncTask?

AsyncTask使用一个处理程序来更新UI,这意味着它将消息发送到UI线程的队列以备将来执行一段时间。虽然你不知道什么时候会发生,但在你的情况下,它几乎总是会在设置片段后执行。

+0

我在我的问题的关键部分添加了重点。我需要知道“几乎总是”可以作为保证。 – cambunctious

+0

我可以把它放在粗体,但这就是它。几乎总是。你不知道。你可以改变你的代码的逻辑。如果在创建片段UI之前强制执行onpost execute,请在添加片段之前或之前的事件/屏幕中执行。 – masp

0

这不能保证,因为AsyncTask应该异步运行,并且无法预测它应该运行的时间。

但是,您可以通过在实例化片段之前执行AsyncTask并简单地将AsyncTask结果传递给片段来控制此行为。这种方法是有意义的,因为如果你想在调用onCreateView()之前运行它,你可能不需要片段的状态或实例变量。

相关问题