Android中Handler詳解

  1. Handler是什麼
    是Android中給我們提供的一套UI更新,消息的處理以及消息的發送的機制
    其中有Handler,MessageQueue,Looper,Message
    我們可以形象的將handler比喻成學生,將Loop比喻成老師,學生要和老師報告,要sendMessage,老師同意以後要執行Looper.looper,學生聽到以後要去執行,則要handleMessage

  2. 爲什麼要用Handler
    在Android設計過程中,就封裝了一套消息機制(消息的創建,傳遞,處理機制),如果不遵循這樣的機制就沒有辦法更新UI,就會拋出異常(不能在一個非UI線程中更新UI)

  3. Handler怎麼用
    用途:
    1.定時發送一個message或runnable對象
    2.可以在一個線程中處理action
Message:
arg1,arg2,obj
Message message = new Message();
Message message = handler.obtainMessage();
message.sendToTarget();==handler.sendMessage(message);

移除一個handler handler.removeCallbacks(runnable)
截獲handler發來的消息

Handler handler = new Handler(new Callback){
boolean handleMessage()

}void handlMessage()

4.Android中爲什麼要設計只能通過Handler更新UI
最根本的目的就是解決多線程併發問題
假設如果在一個Activity中有多個線程去更新UI,並且沒有加鎖機制,那麼會產生什麼樣的問題?
UI界面錯亂
如果每次更新UI,並且都有加鎖機制,那又會產生什麼樣的問題?
性能下降
綜上所述:
Android給我們提供了一套更新UI的機制,所有的更新UI操作,都是在主線程的消息隊列當中去輪詢處理的

5.Handler原理
一:Handler封裝了消息的發送(主要包括消息發送給誰)
1.內部包含一個消息隊列,也就是MessageQueue,所有的Handler發送的消息都會走向這個消息隊列當中去。
2.Loop.looper(),就是一個死循環,他會不斷的從MessageQueue中取消息,如有消息就會處理,沒有消息就會阻塞。
二:MessageQueue就是一個消息隊列,可以添加消息,可以處理消息
三:handler也很簡單,內部會跟Looper關聯,也就是說找到了looper就找到了messagequeue, 在handler中發消息,其實就是向messagequeue中發送消息
總結:handler負責發送message,looper負責接收message,並直接把消息回傳到handler自己

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章