11

我一直在閱讀有關此事的Android文檔(AsyncTaskThread)和vogella tutorial,但我還是有疑問。AsyncTask和Thread之間的真正區別

例如,我希望從Android應用程序發送消息到服務器。我想要處理它的迴應。我應該使用什麼?

我看過一些例子,他們爲不阻塞UI創建了一個新的線程,但是這樣我們沒有進程的進度,你也必須在線程內處理響應,因爲run()方法不返回任何東西。

AsyncTask似乎比Thread更好的選擇,但我不知道是否有一些關於Android如何運行AsyncTask或線程的連續性。使用2個此功能

回答

22

請仔細閱讀本博客

http://crazyaboutandroid.blogspot.in/2011/12/difference-between-android.html

和細節是:

Android的服務之間的區別,螺紋, IntentService和AsyncTask

何時使用?

服務

Task with no UI, but shouldn't be too long. Use threads within service for long tasks. 

主題

- Long task in general. 

- For tasks in parallel use Multiple threads (traditional mechanisms) 

的AsyncTask

- Small task having to communicate with main thread. 

- For tasks in parallel use multiple instances OR Executor 
4

一般是等價的,但的AsyncTask是在整合方面有GUI

+0

然而,Android文檔說'AsyncTasks應該用於短操作(最多幾秒鐘)' – 2012-08-01 12:23:18

+0

yeas,因爲你使用GUI和用戶不想等待很長一段時間:) – 2012-08-01 12:25:42

+0

但是AsynTask將像一個獨立的線程一樣運行。他的工作不應該影響主線程(GUI)。或者我錯了? – 2012-08-01 12:30:58

4

的AsyncTask更加簡單使正確且容易使用的UI線程。該類允許執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序。

你可以控制自己的功能

doInBackground(參數... PARAMS), onCancelled(), onPostExecute(結果結果), onPreExecute(), nProgressUpdate(進展.. 。值), publishProgress(進展...值)

4
  • 我寧願使用異步任務,因爲它會讓你知道什麼時候 background process得到開始,在,當我可以parse 響應。
  • 異步有一個像onPreExecuteonPostExecute方法,這將使我們之前並調用後臺 任務後完成的任務。
3

AsyncTask enables proper and easy use of the UI thread. - 從Developer

事情是 - AsyncTask是一種特殊的線程 - 一個是GUI線程,它在後臺工作,也讓你用GUI做點什麼 - 它基本上是用函數「預編程」的onPreExecute(), do inBackground(), onPostExecute()

爲了使Thread以這種方式工作,你必須編寫一段代碼。

+0

Loooot的代碼是不需要的。使用處理程序是非常基本的 – afadfadf 2017-05-29 04:45:43

15

所有其他的答案在這裏是不完整的,還有的AsyncTask和線程之間有很大的區別,即

線程可以從任何線程,主/ UI或背景被觸發;但AsyncTask必須由主線程觸發。

同樣在android的較低api上(不確定,可能是api級別< 11),AsyncTask的一個實例只能執行一次。

欲瞭解更多信息一般讀Difference between Android Service,Thread,IntentService and AsyncTask

一般

主題

  • 長期任務。

  • 對於並行使用多線程任務(傳統機制)

的AsyncTask具有主線程進行通信

  • 小的任務。

  • 對於並行使用多個實例任務或執行人

相關問題