抖音短視頻系統(tǒng)開發(fā),消息機制的原理細節(jié)處理
對于Android抖音短視頻系統(tǒng)開發(fā)來說,Binder和Handler是兩大利劍,分別實現(xiàn)了進程間和線程間的通訊。Android的消息機制,主要包括Hander,Looper,Message和MessageQueue四個數(shù)據(jù)類型,但從概念上講,核心是線程和消息隊列,一切操作圍繞某個線程和它對應的消息隊列展開,抖音短視頻系統(tǒng)開發(fā)常用Handler,Looper,MessageQueue這三個類都會和同一個線程綁定。主要原理為通過Threadlocal讓每個線程具備了一個消息隊列,消息隊列一方面作為存儲消息的數(shù)據(jù)結構,另一方面負責消息具體的入列,出列,阻塞等核心操作;而Handler負責將消息發(fā)送到相應線程的消息隊列中,并對出列的消息進行處理;而Looper則通過循環(huán),不斷的嘗試獲取消息并對獲取到的消息進行分發(fā),交給消息對應的target(Handler)來處理,然后在消息處理完畢后進行回收,回收到消息池中。

?
所以通過消息機制,可以實現(xiàn)線程間的通信,進行數(shù)據(jù)的傳遞;也可以作為線程間通信的協(xié)議,讓一個線程通知另一個線程執(zhí)行某段業(yè)務邏輯。同時,也可以實現(xiàn)線程切換,執(zhí)行延遲,循環(huán)執(zhí)行的操作。
?
這四個數(shù)據(jù)類型中,抖音短視頻系統(tǒng)開發(fā)接觸最多的是Hander。?Handler是消息機制中我們接觸最多的類,可以理解為消息機制的調(diào)度器。它會和某個線程及相應的消息隊列綁定在一起,負責向這個線程的消息隊列里發(fā)送消息,并對出列的消息進行處理。和哪個線程綁定在一起,就會向哪個線程的消息隊列里發(fā)送消息,同時處理消息的代碼也就在哪個線程里執(zhí)行,但是可以從其他任意一個線程向該線程發(fā)送消息。

抖音短視頻系統(tǒng)開發(fā)Android的消息機制,從概念上來講,核心是圍繞消息隊列展開的。通過ThreadLocal,讓每個Thread具備一個消息隊列,然后才展開對消息隊列相關的操作處理。而源碼中,消息隊列是通過Looper來添加的。
?
Message,消息,它的作用可以從兩方面來理解,一方面可以理解為攜帶任意數(shù)據(jù)信息的對象,在線程建進行數(shù)據(jù)/消息傳遞;另一方面,可以理解為線程間通信的協(xié)議,將協(xié)議的關鍵信息封裝到Message對象中,另外一個Thread接收到了之后進行解析,然后執(zhí)行相應的業(yè)務邏輯。

?
?接下來,我們涉及到了消息機制的核心消息隊列MessageQueue。MessageQueue雖然翻譯過來是隊列,但數(shù)據(jù)結構是單鏈表,以mMessages作為頭元素,Message的next為下一個指針。它負責完成消息機制的核心操作,包括消息入列,出列,刪除消息,是否包含某個消息以及退出等。
除此之外,??抖音短視頻系統(tǒng)開發(fā)MessageQueue內(nèi)部還有上面這幾個函數(shù),用于判斷是否包含某個消息,以及刪除消息,實現(xiàn)比較簡單。
聲明:以上內(nèi)容為云豹科技作者本人原創(chuàng),未經(jīng)作者本人同意,禁止轉(zhuǎn)載,否則將追究相關法律責任