2012-12-26 230 views
11

我想在活動中設置一個變量,以我的AsyncTask的結果來設定。我已閱讀,我不能返回一個變量,那我就必須設置變量在我的活動,然後改變它在onPostExecute方法。等待的AsyncTask完成或變量

我的問題是,完成的AsyncTask後,我需要使用該變量。我遇到了麻煩,因爲迄今爲止我嘗試過的所有解決方案都會導致UI凍結,然後無法響應。

我迄今爲止嘗試:

while (!task.isCancelled()) { 
    // Wait... 
} 

而且

while (variable == null) { 
    // Wait ... 
} 

是我在做什麼,從一個的AsyncTask變量傳遞給我的活動最好的方法是什麼?如果是的話,我該如何等待任務在活動中完成而不鎖定UI?

+10

你不應該「等待」爲'AsyncTask'。它應該在完成時做一些事情,可能在'onPostExecute()'中。 – Eric

+1

在'onPostExecute()'方法中,我將活動中的變量更改爲結果。我試圖做的是等到變量被改變。 – Dan

+0

確實 - 不要這樣做。 'AsyncTask'的'onPostExecute()'本身應該開始你想在任務完成後發生的一系列事件。沒有其他的代碼應該依賴於這個任務。 – Eric

回答

13

只要把你想要的變量是一個功能改變後執行,並呼籲從onPostExecute這個函數的代碼。

+1

這不是一個乾淨的編碼! –

37

如果你是依賴於的AsyncTask的結果,你可以做到這一點。

Object result = asyncTask.execute().get(); 

結果的類型是doInBackground()方法中的返回類型。但是,那麼你的主線程將一直等到任務完成。

+0

謝謝!這正是我所期待的。 – PeteH

+4

但是,如果你這樣做,你會阻止主線程。這是不可推薦的。 – adalPaRi

+0

adalPaRi,除非它是一個閃屏? –