1. 程式人生 > >安卓handler機制

安卓handler機制

     安卓自從設計之初,為了避免主執行緒卡頓的問題,禁止在主執行緒種進行網路請求;禁止在子執行緒更新ui,避免UI錯亂。為了子執行緒、主執行緒間通訊,設計了handler機制。handler機制是面試必考的科目,考察求職者理解深度、表達能力的,總結一下。

    借用的別人的圖,表達的已經很詳細了。

   補充一個阻塞式迴圈知識點:
主執行緒的死迴圈一直執行是不是特別消耗CPU資源呢? 其實不然,這裡就涉及到Linux pipe/epoll機制,簡單說就是在主執行緒的MessageQueue沒有訊息時,便阻塞在loop的queue.next()中的nativePollOnce()方法裡,此時主執行緒會釋放CPU資源進入休眠狀態,直到下個訊息到達或者有事務發生,通過往pipe管道寫端寫入資料來喚醒主執行緒工作。這裡採用的epoll機制,是一種IO多路複用機制,可以同時監控多個描述符,當某個描述符就緒(讀或寫就緒),則立刻通知相應程式進行讀或寫操作,本質同步I/O,即讀寫是阻塞的。 所以說,主執行緒大多數時候都是處於休眠狀態,並不會消耗大量CPU資源。