Android中Handler
在效能最佳化方面考慮,Android的UI操作其實並不是執行緒安全的,這意味著如果有多個執行緒併發操作UI元件,就會導致執行緒安全的問題,為了這個問題,Android提供瞭解決方法:指定了一條簡單的規則,只允許UI執行緒修改Activity裡的元件
當第一個程式第一次啟動時,Android會同時啟動一條Main Thread(主執行緒),負責處理和UI相關的時間,比如按鍵時間,接觸螢幕以及螢幕繪製事件,並把相關的時間分發到對應的元件進行處理。因此,主執行緒又被稱為UI執行緒
Android的訊息傳遞機制是裡外一種形式的“事件處理”,這是為了解決Android應用的多執行緒問題:只允許UI執行緒修改Activity裡的U元件,這樣會導致新啟動的執行緒無法動態改變介面元件的屬性值。但是在實際的開發中,尤其是涉及動畫的遊戲開發中,需要讓新啟動的執行緒週期性的改變介面元件的屬性,這就需要Handler的訊息傳遞機制來實現
-
Handler的底層實現原理
要理解handler的實現原理,其實最重要的是Looper的實現原理,Looper才是實現handler機制的核心。
任何一個handler在使用sendMessage或者post時候,都是先構造一個Message,並把自己放到Message中,然後把Message放到對應的Looper的MessageQueue,Looper透過控制MessageQueue來獲取message執行其中的handler或者runnable。
要在當前執行緒中執行handler指定操作,必須要先看當前執行緒中有沒有looper,如果有looper,handler就會透過sendMessage,或者post先構造一個message,然後把message放到當前執行緒的looper中,looper會在當前執行緒中迴圈取出message執行,如果沒有looper,就要透過looper.prepare()方法在當前執行緒中構建一個looper,然後主動執行looper.loop()來實現迴圈。
-
Handler類的兩個作用:在新啟動的執行緒中傳送資訊和在主執行緒中獲取、處理資訊
-
Message:Handler處理和接收的訊息物件
-
Looper:每個執行緒擁有一個Looper,它的loop負責讀取MessageQueue中的訊息,讀到訊息之後,就把訊息交給該訊息的Handler處理
-
MessageQueue:訊息佇列,採用先進先出的方式來管理Message。程式建立Loop時就會在它的構造器中建立MessageQueue物件
-
在主UI執行緒中,系統已經初始化; 一個Loop物件,因此可以直接建立Handler
-
在自己啟動的子執行緒中,必須自己建立一個Looper物件,啟動它,建立物件並呼叫它的prepare方法
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2689232/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android中的handlerAndroid
- Android中Handler的使用Android
- Android中handler問題彙總Android
- Android中handler倒數計時Android
- Android中Handler的正確使用Android
- [Handler]android-Handler解釋Android
- Android Handler原理Android
- Android之HandlerAndroid
- Android Handler機制之Handler 、MessageQueue 、LooperAndroidOOP
- Android中Handler引起的記憶體洩露Android記憶體洩露
- Android 中 Handler 引起的記憶體洩露Android記憶體洩露
- Android中的Handler, Looper, MessageQueue和ThreadAndroidOOPthread
- Android學習-HandlerAndroid
- Android Handler 原始碼解析Android原始碼
- Android Handler 原始碼探索Android原始碼
- Android 基礎之 HandlerAndroid
- Android Handler面試總結Android面試
- Android開發之HandlerAndroid
- Android——Handler原始碼分析Android原始碼
- Android Handler機制理解Android
- Android Handler原理詳解Android
- Android 面試(五):探索 Android 的 HandlerAndroid面試
- Android中Handler Runnable與Thread的區別詳解Androidthread
- Android 中Message,MessageQueue,Looper,Handler詳解+例項AndroidOOP
- 移動架構 (二) Android 中 Handler 架構分析,並實現自己簡易版本 Handler 框架架構Android框架
- jquery , find the event handler,找到jquery中的event handlerjQuery
- Android 進階 ———— Handler系列之建立子執行緒HandlerAndroid執行緒
- android訊息機制—HandlerAndroid
- Android學習筆記·HandlerAndroid筆記
- Android訊息機制HandlerAndroid
- Android 8.1 Handler 原始碼解析Android原始碼
- Android Handler機制詳解Android
- Android:Handler學習總結Android
- 深入原始碼解析Android中的Handler,Message,MessageQueue,Looper原始碼AndroidOOP
- Android Handler與Looper原理簡析AndroidOOP
- Android原始碼學習之handlerAndroid原始碼
- Android Handler機制之ThreadLocalAndroidthread
- Android訊息機制Handler用法Android