2016-03-24 13:17:33 1371瀏覽
在Android開發(fā)程序當中,或多或少使用了工作者線程,對于零基礎學員來說都不知道什么是多線程,線程程序的“麻煩”源于它很抽象、與單線程程序運行模式不同,那么,下面我們來介紹一下Android多線程及異步處理吧。
1、用戶態(tài)線程
由于內(nèi)核并沒有對多線程進程的支持,因此,內(nèi)核中只有單線程進程的概念, 而多線程進程是通過一個和應用程序連接的函數(shù)庫實現(xiàn)的。由于內(nèi)核沒有輕量 級進程(線程)的概念,因此它不能獨立的對之進行調(diào)度,而是由一個線程運 行庫來組織線程的調(diào)度,其主要工作在于在各個線程的棧之間調(diào)度。如果一個進程中的某一個線程調(diào)用了一個阻塞的系統(tǒng)調(diào)用,該進程就會被阻塞,當然該進程中的其他所有線程也同時被阻塞,因此UNIX使用了異步I/O機制。
這種機制主要的缺點在于在一個進程中的多個線程的調(diào)度中無法發(fā)揮多處理器的優(yōu)勢(如上述的阻塞情況)。其優(yōu)點包括:
A、(相對于進程操作而言)某些線程操作的系統(tǒng)消耗大大減少。比如,對屬于同一個進程的線程之間進行調(diào)度切換時不需要調(diào)用系統(tǒng)調(diào)用,因此將減少額 外的消耗,往往一個進程可以啟動上千個線程也沒有什么問題。
B、用戶態(tài)線程的實現(xiàn)方式可以被定制或修改以適應特殊應用的要求。這對于多 媒體實時過程等尤其有用。另外,用戶態(tài)線程可以比核心態(tài)線程實現(xiàn)方法的默認情況支持更多的線程。
LINUX的線程庫有NPTL(Native POSIX Thread Library)和LinuxThreads。
2、核心態(tài)線程
這種線程的實現(xiàn)方法允許不同進程中的線程按照同一相對優(yōu)先調(diào)度方法進行調(diào) 度。這有利于發(fā)揮多處理器的并發(fā)優(yōu)勢。
3、Handler、Looper、MessageQueue介紹
Handler用于異步消息處理,但是Handler自己并不會創(chuàng)建線程。一般Handler用于計劃任務和線程間的通信。
在后臺線程與UI線程的交互中最常用。原理是:系統(tǒng)啟動程序時,會自動為UI線程創(chuàng)建一個消息隊列,和用于管理這個消息隊列的Looper。在創(chuàng)建的后臺線程時,默認是不會創(chuàng)建Looper和消息隊列的(我們自己可以通過調(diào)用Looper.prepare()給后臺線程創(chuàng)建Looper和消息隊列)。
通過給Handler傳遞不同的Looper實現(xiàn)向不同的線程傳遞信息。Looper.getMainLooper()會獲得UI線程的Looper。
4、Android多線程與界面交互的方法
*Activity.runOnUIThread(Runnable)
*View.post(Runnable),View.postDelay(Runnable,long)
*Handler
*AsyncTask
以上就是關(guān)于Android多線程及異步處理的詳細介紹,希望對大家有幫助,扣丁學堂2016年5月4號正式開Android培訓第一個就業(yè)班,首期Android培訓費用是9960元,正在火熱報名中。
查看更多關(guān)于“Android培訓資訊”的相關(guān)文章>>