2016-09-16 23 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()之前運行它,你可能不需要片段的狀態或實例變量。

相關問題