如果你看到Asyntask和Handler的源代碼,你將會看到他們的代碼純粹用Java。 (當然,有一些例外,但這不是重點)。
這是什麼意思?這意味着在Asyntask或Handler中沒有魔法。作爲開發人員,他們只是讓你的工作更輕鬆。
例如:如果ProgramA調用了methodA(),了methodA()將在不同的線程與ProgramA.You可以很容易地通過試運行:
Thread t = Thread.currentThread();
int id = t.getId();
,以及爲何要使用新的線程?你可以谷歌的。許多原因。
那麼,有什麼區別?
AsyncTask和Handler是用Java編寫的(內部使用一個線程),所以您可以使用Handler或AsyncTask執行所有操作,您也可以使用線程來實現。
Handler和AsyncTask真的可以幫助您嗎?
最明顯的原因是調用者線程和工作線程之間的通信。 (調用者線程:調用Worker線程來執行某個任務的線程。調用者線程可能不總是UI線程)。當然,您可以通過其他方式在兩個線程之間進行通信,但存在很多缺點,例如:主線程不是線程安全的(大多數情況下),換句話說,是危險的。
這就是爲什麼你應該使用Handler和AsyncTask。他們爲你做了大部分工作,你只需要知道要覆蓋哪些方法。
差異處理程序和AsyncTask:當調用者線程是UI線程時使用AsyncTask。這是Android的文件說什麼:
AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers
我想強調兩點:
1)易於使用的用戶界面線程的(所以,當使用調用程序線程是UI線程)。
2)不需要操縱處理程序。 (意思是:你可以使用Handler而不是AsyncTask,但AsyncTask是一個更簡單的選項)。
在這篇文章中有很多東西,我還沒有說,例如:什麼是UI線程,爲什麼它更容易。你必須知道每一種背後的一些方法和使用它,你就會徹底明白爲什麼..
@:當你讀的Android文件,你會看到:
Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue
它們可能看起來很奇怪,在第一。只要理解,每個線程都有每個消息隊列。 (就像一個待辦事項列表),線程會把每條消息做到消息隊列實例。 (啊,也許就像你完成你的工作,去睡覺)。所以,當Handler通信時,它只是給調用者線程發送消息,並等待處理。 (sophiscate?但你只知道,Handler可以以安全方式與呼叫者線程進行通信)
好,所以想法是將任務可能需要更多時間委派給其他線程,以便主線程不會等待信息從其他地方可以運行別的東西。所以,儘管你可以運行onCreate中的所有東西,但它可能不是最有效的方法。 – Rarw
那麼這取決於你如何定義「高效」。最佳實踐通常表明,如果您的某些內容需要「明顯」的時間,那麼您應該將其移出UI線程,因此不會使用onCreate。這也取決於你是否需要結果來顯示UI等。但是,是的,你的評論是正確的,我會說。 – mfrankli