在我的Android應用程序中,我想嚴格遵循Android指南。所以在執行AsyncTask
之後,我有兩個選項可以用結果更新UI。我應該從OnPostExecute的AsyncTask更新UI元素嗎?
- 我可以使用回調監聽器將結果發送回主線程,並從那裏更新UI。
- 我還可以傳遞所需的UI元素的參考
AsyncTask
和onPostExecute
更新這些元素。
那麼,哪種方法更好,爲什麼?
在我的Android應用程序中,我想嚴格遵循Android指南。所以在執行AsyncTask
之後,我有兩個選項可以用結果更新UI。我應該從OnPostExecute的AsyncTask更新UI元素嗎?
AsyncTask
和onPostExecute
更新這些元素。那麼,哪種方法更好,爲什麼?
您必須真正瞭解線程,如果它是一個簡單的回調監聽器,它不會更改代碼正在運行的線程。如果是這種情況,那麼方法(1)和(2)或多或少會相同。
如果你實際上是指使用Handler
,那麼它有一定的差異,一個Handler
實際上排隊的回調,後來在其中創建Handler
線程調用它。
然而,如OnPostExecute
已經在UI Thread
,這意味着它是確定更新UI元素作爲(2)。而最重要的點你應該知道的是你的Activity
可能在OnPostExecute
被調用時被銷燬。如果是這樣,則不應使用AsyncTask
創建的Activity
引用修改UI。
是長時間的後臺任務上的AsyncTask
onBackground
功能運行。在onBackground
的末尾,onPostExecute
被調用,您應該進行UI更改。
如果您的活動中有AsyncTask
,它可以正常工作。您可以在onPostExecute
之內更新UI視圖,因爲您可以訪問它們。
當你AsyncTask
是一個單獨的類,你沒有你的onPostExecute
函數內部訪問那麼你的活動的UI視圖,你可以將結果返回到您的Activity
和更新UI那裏。
如何在通過onPostExecute()將結果返回給您的活動時,在另一個文件中聲明瞭異步? –
最簡單的方法是使用事件總線。試着看看Otto,它只是幾行代碼http://square.github.io/otto/ – Sharj
如果您想在任務完成後更新您的UI,兩種情況都可以正常工作。 onPostExecute
也處理主線程中的代碼。哪種方法更好?這取決於你想如何組織你的代碼結構。
onPostExecute
之內更新它們,因爲你的代碼會更簡單明瞭。
您的兩種方法都是正確的。根據您的方便嘗試。 – Tauqir