資源描述:
《Android中消息系統(tǒng)模型和Handler Looper》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、Android中消息系統(tǒng)模型和HandlerLooper 作為Android中大量使用的Handler,結(jié)合Thread使其具有眾多的使用形式和方法,讓我一時感覺這個東西有些玄乎,不明所以然,這到底是一個什么樣的存在呢?通過網(wǎng)上資料和源碼的學(xué)習(xí),這個Handler也差不多弄清楚了,現(xiàn)在總結(jié)下這個學(xué)習(xí)結(jié)果。?一Handler作用和概念通過官方文檔了解到Handler的大致概念是: Handler能夠讓你發(fā)送和處理消息,以及Runnable對象;每個Handler對象對應(yīng)一個Thread和Thread的消息隊列。當(dāng)你創(chuàng)建一個Handler時,它就和Thread的消息隊列綁定在一起,然
2、后就可以傳遞消息和runnable對象到消息隊列中,執(zhí)行消息后就從消息隊列中退出。? Handler的作用就是:調(diào)度消息和runnable對象去被執(zhí)行;使動作在不同的線程中被執(zhí)行?! ‘?dāng)一個應(yīng)用程序中進(jìn)程被創(chuàng)建時,它的主線程專門運行消息隊列(messageQueue),去管理頂層的應(yīng)用程序相關(guān)的對象如:activity,broadcastReceiver,windows等,你可以創(chuàng)建你的Thread,和主線程進(jìn)行交互——通過Handler,交互的方法就是通過post或者sendMessage。但是在你的新線程中,給定的Message或者Runnable,會在適當(dāng)?shù)臅r候的被調(diào)度和處理
3、。(即不會被立即處理——阻塞式)。 這是官方文檔中對Handler描述的大致意思(英文比較爛翻譯不定正確)。?從這些文檔中我們大概了解到handler干了些什么:· 運行在某個線程上,共享線程的消息隊列;· 接收消息、調(diào)度消息,派發(fā)消息和處理消息;· 實現(xiàn)消息的異步處理;基本上就是和消息有關(guān),那么這實際上是在干什么呢? ——建立消息處理模型/系統(tǒng)。 要學(xué)習(xí)Handler,看到肯定是和消息有關(guān),可能還是需要先熟悉一下消息系統(tǒng)的構(gòu)成和簡單原理。下面就先學(xué)習(xí)一下消息系統(tǒng)的基本原理。二消息系統(tǒng)的基本原理和構(gòu)成??????從一般的消息系統(tǒng)模型的建立大致構(gòu)成以下幾個部分:
4、l?消息原型 l?消息隊列 l?發(fā)送消息 l?消息循環(huán) l?消息獲取 l?消息派發(fā) l?消息處理大致模型圖如下:? ?? 消息系統(tǒng)模型一般會包括以上七個部分(消息原型,消息隊列,消息發(fā)送,消息循環(huán),消息獲取,消息派發(fā),消息處理)。實際上的核心是消息隊列和消息循環(huán),其余部分都是圍繞這兩部分進(jìn)行的?! 那懊嫖臋n的分析中我們知道Handler就是用來建立消息處理的系統(tǒng)模型,那么和這里基本消息系統(tǒng)模型相比,那么Handler又是如何囊括這七個部分的呢? 在Android中對這六個部分進(jìn)行了抽象成四個獨立的部分: Handler,Messa
5、ge,MessageQueue,Looper;· Message就是消息原型,包含消息描述和數(shù)據(jù),· MessageQueue就是消息隊列,· Looper完成消息循環(huán)· Handler就是駕馭整個消息系統(tǒng)模型,統(tǒng)領(lǐng)Message,MessgeQueue和Looper; Handler能夠?qū)崿F(xiàn)消息系統(tǒng)模型,那么具體是如何進(jìn)行工作的呢,下面探究一下這其中工作的方法和原理。?三Handler工作原理分析 要了解Handler工作原理,先看一下這個系統(tǒng)模型具體組成的層次結(jié)構(gòu)框架是個什么樣的。? ?Looper: 實現(xiàn)Thread的消息循環(huán)和消息派發(fā),缺省情況下T
6、hread是沒有這個消息循環(huán)的既沒有Looper;需要主動去創(chuàng)建,然后啟動Looper的消息循環(huán)loop;與外部的交互通過Handler進(jìn)行;MessageQueue: 消息隊列,由Looper所持有,但是消息的添加是通過Handler進(jìn)行; 消息循環(huán)和消息隊列都是屬于Thread,而Handler本身并不具有Looper和MessageQueue;但是消息系統(tǒng)的建立和交互,是Thread將Looper和MessageQueue交給某個Handler維護(hù)建立消息系統(tǒng)模型?! ∷韵⑾到y(tǒng)模型的核心就是Looper。消息循環(huán)和消息隊列都是由Looper建立的,而建立Handle
7、r的關(guān)鍵就是這個Looper。 一個Thread同時可以對應(yīng)多個Handler,一個Handler同時只能屬于一個Thread。Handler屬于哪個Thread取決于Handler在那個Thread中建立?! ≡谝粋€Thread中Looper也是唯一的,一個Thread對應(yīng)一個Looper,建立Handler的Looper來自哪個Thread,Handler屬于哪個Thread?! 」式hread消息系統(tǒng),就是將Thread的Looper交給Han