Android基本功:Handler訊息傳送機制
轉自:http://blog.csdn.net/thanklife/article/details/16983877
一、什麼是UI執行緒
-
當程式第一次啟動的時候,Android會同時啟動一條主執行緒( Main Thread)。
-
主要負責處理與UI相關的事件。
二、UI執行緒存在的問題
-
出於效能優化考慮,Android的UI操作並不是執行緒安全的,意味著如果多個執行緒併發操作UI執行緒,可能導致執行緒安全問題。
-
為了解決這個問題,Android規定:只允許UI執行緒修改Activity裡的UI組建。
三、訊息傳送機制作用
-
為了解決Android應用多執行緒問題—Android平臺只允許UI執行緒修改Activity裡的UI組建,就會導致新啟動的執行緒無法改變介面組建的屬性值。
四、Handler的作用(子執行緒往主執行緒傳送訊息的情況)
-
在新啟動的執行緒中傳送訊息。
-
使用Handler物件的sendMessage()方法或者SendEmptyMessage()方法傳送訊息。
-
-
在主執行緒中獲取處理訊息。
-
重寫Handler類中處理訊息的方法(void handleMessage(Message msg)),當新啟動的執行緒傳送訊息時,訊息傳送到與之關聯的MessageQueue。而Hanlder不斷地從MessageQueue中獲取並處理訊息。
-
五、Hanlder類
Handler類包含如下方法用於傳送、處理訊息:
-
void handleMessage(Message msg):處理訊息的方法,該方法通常用於被重寫。
-
final boolean hasMessage(int what):檢查訊息佇列是否包含what屬性指定值的訊息。
-
final boolean hasMessage(int what,Object object):檢查訊息佇列中是否包含what屬性為指定且object屬性為指定指定物件的訊息。
-
Message obtainMessage():獲取訊息。
-
sendEmptyMessage(int what):傳送空訊息。
-
final boolean sendEmptyMessageDelayed(int what,long delayMillis):指定多少毫秒之後傳送空訊息。
-
final boolean sendMessage(Message msg):立即傳送訊息。
-
final boolean sendMessageDelayed(Message msg,long delayMillis):指定多少毫秒之後傳送訊息。
六、Handler、Loop、MessageQueue、Message原理
-
Handler:
-
傳送訊息,它能把訊息傳送給Looper管理的MessageQueue。
-
處理訊息,並負責處理Looper分給它的訊息。
-
-
Message:Handler接收和處理的訊息物件。
-
Looper:
-
每個執行緒只有一個Looper,它負責管理MessageQueue,會不斷地從MessageQueue取出訊息,並將訊息分給對應的Hanlder處理。
-
主執行緒中,系統已經初始化了一個Looper物件,因此可以直接建立Handler即可,就可以通過Handler來傳送訊息、處理訊息。
-
程式自己啟動的子執行緒,程式必須自己建立一個Looper物件,並啟動它,呼叫Looper.prepare()方法。
-
-
prapare()方法:保證每個執行緒最多隻有一個Looper物件。
-
looper()方法:啟動Looper,使用一個死迴圈不斷取出MessageQueue中的訊息,並將取出的訊息分給對應的Handler進行處理。
-
-
MessageQueue:由Looper負責管理,它採用先進先出的方式來管理Message。
七、使用Handler步驟
-
呼叫Looper的prepare()方法為當前執行緒建立Looper物件,建立Looper物件時,它的構造器會建立與之配套的MessageQueue。
-
有了Looper之後,建立Handler子類例項,重寫HanderMessage()方法,該方法負責處理來自於其他執行緒的訊息。
-
呼叫Looper的looper()方法啟動Looper。
相關文章
- Android訊息機制HandlerAndroid
- android訊息機制—HandlerAndroid
- Android Handler 訊息傳送效能優化Android優化
- Android訊息機制Handler用法Android
- Android之Handler訊息傳遞機制詳解Android
- Handler訊息傳遞機制
- Android的Handler訊息機制 解析Android
- Android Handler 訊息機制詳述Android
- Android Handler訊息傳遞機制:圖文解析工作原理Android
- Android 訊息機制:Handler、MessageQueue 和 LooperAndroidOOP
- Android Handler MessageQueue Looper 訊息機制原理AndroidOOP
- Android Handler機制之Message的傳送與取出Android
- Android進階;Handler訊息機制詳解Android
- Android Handler訊息機制原始碼解讀Android原始碼
- Android-Handler訊息機制實現原理Android
- Android訊息機制全面解析(Handler,MessageQueue,Looper,Threadlocal)AndroidOOPthread
- Handler訊息機制完全解析Handler解析
- Android Handler機制之迴圈訊息佇列的退出Android佇列
- Android全面解析之由淺及深Handler訊息機制Android
- Android Handler機制之訊息池的擴充套件 SimplePool與SynchronizedPoolAndroid套件synchronized
- 學習 Android Handler 訊息機制需要注意這些問題!Android
- 理解 Android 訊息機制Android
- Android 之訊息機制Android
- 從事件驅動程式設計模型分析Handler訊息傳遞機制事件程式設計模型
- Android Handler機制之Handler 、MessageQueue 、LooperAndroidOOP
- Handler 訊息機制以及記憶體洩漏記憶體
- Handler訊息處理機制原始碼解析 上原始碼
- Android非同步訊息機制Android非同步
- flutter 訊息傳遞機制Flutter
- Android 訊息機制詳解(Android P)Android
- android 訊息傳遞機制進階EventBus的深入探究Android
- Android Handler機制之ThreadLocalAndroidthread
- Runtime底層原理探究(二) --- 訊息傳送機制(慢速查詢)
- 【Azure Service Bus】 Service Bus如何確保訊息傳送成功,傳送端是否有Ack機制
- 深入理解Android訊息機制Android
- 面試官:看過Handler原始碼嗎?請簡單說說Android執行緒間訊息傳遞機制?面試原始碼Android執行緒
- RocketMQ(八):訊息傳送MQ
- 【RocketMQ】MQ訊息傳送MQ
- 訊息中介軟體—RocketMQ訊息傳送MQ