2015-09-20 67 views
0

在我的Android應用程序中,我想嚴格遵循Android指南。所以在執行AsyncTask之後,我有兩個選項可以用結果更新UI。我應該從OnPostExecute的AsyncTask更新UI元素嗎?

  1. 我可以使用回調監聽器將結果發送回主線程,並從那裏更新UI。
  2. 我還可以傳遞所需的UI元素的參考AsyncTaskonPostExecute更新這些元素。

那麼,哪種方法更好,爲什麼?

+0

您的兩種方法都是正確的。根據您的方便嘗試。 – Tauqir

回答

1

您必須真正瞭解線程,如果它是一個簡單的回調監聽器,它不會更改代碼正在運行的線程。如果是這種情況,那麼方法(1)和(2)或多或少會相同。

如果你實際上是指使用Handler,那麼它有一定的差異,一個Handler實際上排隊的回調,後來在其中創建Handler線程調用它。

然而,如OnPostExecute已經在UI Thread,這意味着它是確定更新UI元素作爲(2)。而最重要的點你應該知道的是你的Activity可能在OnPostExecute被調用時被銷燬。如果是這樣,則不應使用AsyncTask創建的Activity引用修改UI。

0

是長時間的後臺任務上的AsyncTaskonBackground功能運行。在onBackground的末尾,onPostExecute被調用,您應該進行UI更改。

如果您的活動中有AsyncTask,它可以正常工作。您可以在onPostExecute之內更新UI視圖,因爲您可以訪問它們。

當你AsyncTask是一個單獨的類,你沒有你的onPostExecute函數內部訪問那麼你的活動的UI視圖,你可以將結果返回到您的Activity和更新UI那裏。

+0

如何在通過onPostExecute()將結果返回給您的活動時,在另一個文件中聲明瞭異步? –

+0

最簡單的方法是使用事件總線。試着看看Otto,它只是幾行代碼http://square.github.io/otto/ – Sharj

0

如果您想在任務完成後更新您的UI,兩種情況都可以正常工作。 onPostExecute也處理主線程中的代碼。哪種方法更好?這取決於你想如何組織你的代碼結構。

  1. 如果你只是想更新你的UI。我認爲最好在onPostExecute之內更新它們,因爲你的代碼會更簡單明瞭。
  2. 但是,使用回調更靈活。因爲你可以根據你的傳遞迴調做任何你想要的任務結果。