這篇文章主要講解了“Android中Handler有什么作用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Android中Handler有什么作用”吧!
城陽ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
在性能優(yōu)化方面考慮,Android的UI操作其實(shí)并不是線程安全的,這意味著如果有多個線程并發(fā)操作UI組件,就會導(dǎo)致線程安全的問題,為了這個問題,Android提供了解決方法:指定了一條簡單的規(guī)則,只允許UI線程修改Activity里的組件
當(dāng)?shù)谝粋€程序第一次啟動時,Android會同時啟動一條Main Thread(主線程),負(fù)責(zé)處理和UI相關(guān)的時間,比如按鍵時間,接觸屏幕以及屏幕繪制事件,并把相關(guān)的時間分發(fā)到對應(yīng)的組件進(jìn)行處理。因此,主線程又被稱為UI線程
Android的消息傳遞機(jī)制是里外一種形式的“事件處理”,這是為了解決Android應(yīng)用的多線程問題:只允許UI線程修改Activity里的U組件,這樣會導(dǎo)致新啟動的線程無法動態(tài)改變界面組件的屬性值。但是在實(shí)際的開發(fā)中,尤其是涉及動畫的游戲開發(fā)中,需要讓新啟動的線程周期性的改變界面組件的屬性,這就需要Handler的消息傳遞機(jī)制來實(shí)現(xiàn)
Handler的底層實(shí)現(xiàn)原理
要理解handler的實(shí)現(xiàn)原理,其實(shí)最重要的是Looper的實(shí)現(xiàn)原理,Looper才是實(shí)現(xiàn)handler機(jī)制的核心。
任何一個handler在使用sendMessage或者post時候,都是先構(gòu)造一個Message,并把自己放到Message中,然后把Message放到對應(yīng)的Looper的MessageQueue,Looper通過控制MessageQueue來獲取message執(zhí)行其中的handler或者runnable。
要在當(dāng)前線程中執(zhí)行handler指定操作,必須要先看當(dāng)前線程中有沒有l(wèi)ooper,如果有l(wèi)ooper,handler就會通過sendMessage,或者post先構(gòu)造一個message,然后把message放到當(dāng)前線程的looper中,looper會在當(dāng)前線程中循環(huán)取出message執(zhí)行,如果沒有l(wèi)ooper,就要通過looper.prepare()方法在當(dāng)前線程中構(gòu)建一個looper,然后主動執(zhí)行l(wèi)ooper.loop()來實(shí)現(xiàn)循環(huán)。
Handler類的兩個作用:在新啟動的線程中發(fā)送信息和在主線程中獲取、處理信息
Message:Handler處理和接收的消息對象
Looper:每個線程擁有一個Looper,它的loop負(fù)責(zé)讀取MessageQueue中的消息,讀到消息之后,就把消息交給該消息的Handler處理
MessageQueue:消息隊列,采用先進(jìn)先出的方式來管理Message。程序創(chuàng)建Loop時就會在它的構(gòu)造器中創(chuàng)建MessageQueue對象
在主UI線程中,系統(tǒng)已經(jīng)初始化; 一個Loop對象,因此可以直接創(chuàng)建Handler
在自己啟動的子線程中,必須自己創(chuàng)建一個Looper對象,啟動它,創(chuàng)建對象并調(diào)用它的prepare方法
感謝各位的閱讀,以上就是“Android中Handler有什么作用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Android中Handler有什么作用這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!