2013-01-23 83 views
4

是必須的,我們必須從UI線程啓動和執行asyctask。它是正確的,如果我使用asynctask從非UI線程的Web服務訪問(長時間運行)。 對不起,如果我的查詢是錯誤的。Asynctask從非UI線程

在我的應用程序我要運行約10 web服務,並有上顯示的用戶界面。我很困惑,其做法將是很好的AsyncTask,intentservice或創建的每個Web服務調用線程並使其運行並行的結果。

+1

只需使用普通線程? – PearsonArtPhoto

+0

我的答案試一下......你可以重複使用相同的代碼來調用不同類型的Web服務而不會阻塞UI線程 – Pragnani

回答

0

是的,需要從UI線程運行asynctask。

我會建議使用多線程/可運行的。您還需要在主要活動類中實現一個處理程序來偵聽來自線程的響應。

2

有一些線程規則必須遵循的AsyncTask正常工作:

  1. 的的AsyncTask類必須在UI線程加載。這從JELLY_BEAN自動完成。

  2. 任務實例必須在UI線程上創建。

  3. execute(Params ...)必須在UI線程上調用。

  4. 不要手動調用onExExecute(),onPostExecute(Result),doInBackground(Params ...),onProgressUpdate(Progress ...)。

  5. 任務只能執行一次(如果第二試圖執行一個異常將被拋出。)

    Further Details

在我個人看來,我會建議使用的AsyncTask,因爲它針對運行後臺任務和利用多核處理器等優勢進行了高度優化。

+1

這是錯誤的,一個'IntentService'不需要一個AsyncTask,它已經在後臺運行了'IntentService是服務的基類,可以根據需要處理ASYNCHRONUS請求(表示爲Intents)。「#http://developer.android.com/reference/android/app/IntentService.html – tyczj

+0

@tyczj你說的是真的,但拉胡爾的回答也是如此,儘管它可能*不會回答OP。他沒有使用AsyncTask對IntentService進行任何說明。我懷疑OP需要IntentService。 – Simon

+0

@Simon是的我只是在談論intentservice部分是錯誤的 – tyczj

0

你可以去任何線程或asynctask。 AsyncTask爲您提供了在啓動後臺任務之前以及完成後臺任務或獲取其進度之前管理UI更改方法的方法。

這取決於您的架構要求。