日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Android 为什么要有handler机制?handler机制的原理

發(fā)布時(shí)間:2025/4/16 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 为什么要有handler机制?handler机制的原理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么要有handler機(jī)制?

在Android的UI開(kāi)發(fā)中,我們經(jīng)常會(huì)使用Handler來(lái)控制主UI程序的界面變化。有關(guān)Handler的作用,我們總結(jié)為:與其他線(xiàn)程協(xié)同工作,接收其他線(xiàn)程的消息并通過(guò)接收到的消息更新主UI線(xiàn)程的內(nèi)容。

?????? 我們假設(shè)在一個(gè)UI界面上面,有一個(gè)按鈕,當(dāng)點(diǎn)擊這個(gè)按鈕的時(shí)候,會(huì)進(jìn)行網(wǎng)絡(luò)連接,并把網(wǎng)絡(luò)上的一個(gè)字符串拿下來(lái)顯示到界面上的一個(gè) TextView上面,這時(shí)就出現(xiàn)了一個(gè)問(wèn)題,如果這個(gè)網(wǎng)絡(luò)連接的延遲過(guò)大,可能是10秒鐘甚至更長(zhǎng),那我們的界面將處于一直假死狀態(tài),而如果這段時(shí)間超 過(guò)5秒鐘的話(huà),程序會(huì)出現(xiàn)異常。

???????? 這時(shí)我們會(huì)想到使用線(xiàn)程來(lái)完成以上工作,即當(dāng)按鈕被按下的時(shí)候新開(kāi)啟一個(gè)線(xiàn)程來(lái)完成網(wǎng)絡(luò)連接工作,并把得到的結(jié)果更新到UI上面。但是,這時(shí)候又會(huì) 出現(xiàn)另一個(gè)問(wèn)題,在Android中,主線(xiàn)程是非線(xiàn)程安全的,也就是說(shuō)UI的更新只能在本線(xiàn)程中完成,其他線(xiàn)程無(wú)法直接對(duì)主線(xiàn)程進(jìn)行操作。

??????? 為了解決以上問(wèn)題,Android設(shè)計(jì)了Handler機(jī)制,由Handler來(lái)負(fù)責(zé)與子線(xiàn)程進(jìn)行通訊,從而讓子線(xiàn)程與主線(xiàn)程之間建立起協(xié)作的橋梁,使Android的UI更新的問(wèn)題得到完美的解決。

Handler的工作原理

?????? 一般情況下,在主線(xiàn)程中我們綁定了Handler,并在事件觸發(fā)上面創(chuàng)建新的線(xiàn)程用于完成某些耗時(shí)的操作,當(dāng)子線(xiàn)程中的工作完成之后,會(huì)對(duì)Handler發(fā)送一個(gè)完成的信號(hào),而Handler接收到信號(hào)后,就進(jìn)行主UI界面的更新操作。

andriod提供了 Handler 和 Looper 來(lái)滿(mǎn)足線(xiàn)程間的通信。

  Handler 先進(jìn)先出原則。
  Looper類(lèi)用來(lái)管理特定線(xiàn)程內(nèi)對(duì)象之間的消息交換(Message Exchang搜索e)。
  1)Looper: 一個(gè)線(xiàn)程可以產(chǎn)生一個(gè)Looper對(duì)象,由它來(lái)管理此線(xiàn)程里的Message Queue(消息隊(duì)列)。
  2)Handler: 你可以構(gòu)造Handler對(duì)象來(lái)與Looper溝通,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來(lái)的消息。
  3) Message Queue(消息隊(duì)列):用來(lái)存放線(xiàn)程放入的消息。
  4)線(xiàn)程:UI thread 通常就是main thread,而Android啟動(dòng)程序時(shí)會(huì)替它建立一個(gè)Message Queue。

?

Android程序啟動(dòng)后會(huì)起一個(gè)進(jìn)程,所有的組件都在這個(gè)進(jìn)程里面運(yùn)行。開(kāi)始這個(gè)進(jìn)程只包含一個(gè)線(xiàn)程(備注進(jìn)程怎么能包含線(xiàn)程,我認(rèn)為說(shuō)法有誤),叫做UI主線(xiàn)程,負(fù)責(zé)處理UI界面的顯示更新。對(duì)于一些費(fèi)時(shí)的操作(超過(guò)5S會(huì)卡頓)需要單獨(dú)啟動(dòng)一個(gè)子線(xiàn)程去處理。子線(xiàn)程處理完畢將結(jié)果通知給UI主線(xiàn)程,主線(xiàn)程得到結(jié)果后更新UI界面。子線(xiàn)程與UI主線(xiàn)程的通信在android中使用了消息機(jī)制來(lái)完成,那么是怎么完成的呢?這就和handler 機(jī)制的原理,簡(jiǎn)而言之言而總之,就是需要兩樣樣古老的東西,消息隊(duì)列、輪詢(xún)。也就是說(shuō),主線(xiàn)程起來(lái)以后有一個(gè)消息隊(duì)列,同時(shí)和該隊(duì)列配對(duì)的有一個(gè)輪詢(xún),而子線(xiàn)程有這個(gè)消息隊(duì)列的引用,那這樣,子線(xiàn)程處理完以后就會(huì)向主線(xiàn)程的消息隊(duì)列發(fā)消息,主線(xiàn)程輪詢(xún)自己的隊(duì)列,發(fā)現(xiàn)有未處理的消息就進(jìn)行處理。

總結(jié)

以上是生活随笔為你收集整理的Android 为什么要有handler机制?handler机制的原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。