老生常談的Handler消息機制 -- handler消息流程.

4.Handler機制

Android中主線程也叫UI線程,那麼從名字上我們也知道主線程主要是用來創建、更新UI的,而其他耗時操作,比如網絡訪問,或者文件處理,多媒體處理等都需要在子線程中操作,之所以在子線程中操作是爲了保證UI的流暢程度,手機顯示的刷新頻率是60Hz,也就是一秒鐘刷新60次,每16.67毫秒刷新一次,爲了不丟幀,那麼主線程處理代碼最好不要超過16毫秒。當子線程處理完數據後,爲了防止UI處理邏輯的混亂,Android只允許主線程修改UI,那麼這時候就需要Handler來充當子線程和主線程之間的橋樑了。

我們通常將Handler聲明在Activity中,然後覆寫Handler中的handleMessage方法,當子線程調用handler.sendMessage()方法後handleMessage方法就會在主線程中執行。

這裏面除了Handler、Message外還有隱藏的Looper和MessageQueue對象。

在主線程中Android默認已經調用了Looper.preper()方法,調用該方法的目的是在Looper中創建MessageQueue成員變量並把Looper對象綁定到當前線程中。當調用Handler的sendMessage(對象)方法的時候就將Message對象添加到了Looper創建的MessageQueue隊列中,同時給Message指定了target對象,其實這個target對象就是Handler對象。主線程默認執行了Looper.looper()方法,該方法從Looper的成員變量MessageQueue中取出Message,然後調用Message的target對象的handleMessage()方法。這樣就完成了整個消息機制。

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