開發與維運

抖音短視頻系統開發,消息機制的原理細節處理

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

短視頻1~1.jpg

所以通過消息機制,可以實現線程間的通信,進行數據的傳遞;也可以作為線程間通信的協議,讓一個線程通知另一個線程執行某段業務邏輯。同時,也可以實現線程切換,執行延遲,循環執行的操作。

這四個數據類型中,抖音短視頻系統開發接觸最多的是Hander。 Handler是消息機制中我們接觸最多的類,可以理解為消息機制的調度器。它會和某個線程及相應的消息隊列綁定在一起,負責向這個線程的消息隊列裡發送消息,並對出列的消息進行處理。和哪個線程綁定在一起,就會向哪個線程的消息隊列裡發送消息,同時處理消息的代碼也就在哪個線程裡執行,但是可以從其他任意一個線程向該線程發送消息。

短視頻2~1.jpg

抖音短視頻系統開發Android的消息機制,從概念上來講,核心是圍繞消息隊列展開的。通過ThreadLocal,讓每個Thread具備一個消息隊列,然後才展開對消息隊列相關的操作處理。而源碼中,消息隊列是通過Looper來添加的。

Message,消息,它的作用可以從兩方面來理解,一方面可以理解為攜帶任意數據信息的對象,在線程建進行數據/消息傳遞;另一方面,可以理解為線程間通信的協議,將協議的關鍵信息封裝到Message對象中,另外一個Thread接收到了之後進行解析,然後執行相應的業務邏輯。

短視頻3~1.jpg

 接下來,我們涉及到了消息機制的核心消息隊列MessageQueue。MessageQueue雖然翻譯過來是隊列,但數據結構是單鏈表,以mMessages作為頭元素,Message的next為下一個指針。它負責完成消息機制的核心操作,包括消息入列,出列,刪除消息,是否包含某個消息以及退出等。

除此之外,  抖音短視頻系統開發MessageQueue內部還有上面這幾個函數,用於判斷是否包含某個消息,以及刪除消息,實現比較簡單。
聲明:以上內容為雲豹科技作者本人原創,未經作者本人同意,禁止轉載,否則將追究相關法律責任

Leave a Reply

Your email address will not be published. Required fields are marked *