Android中Handler詳解,執行緒間通訊機制

2021-07-07 07:44:21 字數 908 閱讀 3865

已經很長時間沒有寫過部落格了,最近看了一些大牛們寫的文章,都說寫部落格是乙個很好的習慣,可以把零散的知識記錄下來,這樣以後如果要遇到,就可以很快的把丟失的知識找回來,達到事半功倍效果。我前段時間剛剛找到我人生中的第乙份工作,於是就想著把面試中經常會被問到的問題來記錄一下。希望大家喜歡

hanlder的使用,我想已經不用給大家說了,我相信搞過android開發的人應該都會用。但是大多數只是知道使用,卻不知道handler的工作原理。今天我就把我對handler的理解給大家講一講。

一提到handler,我們必須要知道這幾個類:

messagequeue:訊息佇列,用來存放訊息的,滿足佇列的特性,先進先出

looper:管理訊息佇列中的訊息。與當前執行緒繫結,乙個執行緒只能擁有乙個looper,乙個looper擁有乙個訊息佇列(messagequeue),不斷的從其擁有訊息佇列中取訊息來交給當前執行緒來處理。如果其擁有的訊息佇列中沒有訊息,則進去阻塞狀態。

我們現在已經對執行緒間通訊所用到的幾個類有個基本的了解了,接下來就看看它們具體是怎麼協同工作的。

1.handler的建立,主線程(ui執行緒)在建立handler的時候,會通過threadlocal建立乙個looper,每個乙個執行緒只能建立乙個looper,這也是使用threadlocal的原因。同時,當looper建立的時候,會初始化乙個messagequeue(訊息佇列);

2.handler的建立訊息。每乙個訊息都需要handler去處理,通過handler的建立就可以去處理訊息。handler建立的時候,首先會去訊息池中查詢,如果訊息池中存在此訊息,則直接從訊息池中獲取,如果沒有則再例項化訊息。

3.訊息的傳送,子執行緒通過handler將訊息傳送messagequeue當中去,looper不停對messagequeue對檢視,有訊息的話,則交給主線程去執行,如果沒有的話,則迴圈等待。

執行步驟如下圖示:

android中Handler的用法

寫了乙個demo,如下 public class mainactivity extends activity endbutton.setonclicklistener new onclicklistener 建立handler物件 handler handler new handler runnab...

android中的Handler機制

一 為什麼要用handler 之所以需要跨執行緒通訊是因為在 android 中主線程通常只負責 ui 的建立和修改,子執行緒負責網路訪問和耗時操作,因此,主線程和子執行緒需要經常配合使用才能完成整個 android 功能,這時候就有了handler的出現。二 什麼是handler 訊息佇列,先進後...

Android中的Handler機制

1 android系統不允許在主線程中執行耗時操作。activity和service不超過5秒,boroadcastreceiver元件廣播不超過10秒 2 耗時操作交給工作執行緒去完成。有時,耗時工作完成後,需要通知主線程 需要更新ui元件,需要有一種機制在主線程和工作現場之間進行通訊。這是機制在...