handler

handler是如何保證延遲消息的實(shí)現(xiàn)?

如果發(fā)送過(guò)來(lái)的message有延遲參數(shù)when>0,那么會(huì)和現(xiàn)在的時(shí)間進(jìn)行相減,得出一個(gè)值,這只休眠喚醒機(jī)制,在n秒之后喚醒,繼續(xù)執(zhí)行。

handler post和send兩種發(fā)送消息的方式有何不同?如何取舍。

post發(fā)送一個(gè)runnable對(duì)象,這個(gè)對(duì)象會(huì)被Message對(duì)象的callback字段所引用,最后這個(gè)message對(duì)象會(huì)被添加進(jìn)消息隊(duì)列,這樣就和正常的消息一樣最后被looper取出,交給handler處理。

主線程的LOOP可以通過(guò)quit()退出嗎?為什么?

主線程在創(chuàng)建LOOP的時(shí)候在構(gòu)造方法中傳遞了一個(gè)參數(shù)mQuitAllowed,mQuitAllowed這個(gè)參數(shù)為false決定了這個(gè)LOOP是不可以退出的,我們?cè)谄渌€程創(chuàng)建的時(shí)候也可以選擇這個(gè)參數(shù),默認(rèn)是true ,可以退出的。

Loop的quitSafely()方法和quit()方法的區(qū)別:

quit()方法是會(huì)清空現(xiàn)在消息池中的所有消息,而quitSafely()方法則會(huì)將延遲的消息全部清楚,非延遲的消息會(huì)配發(fā)到handler執(zhí)行。這兩個(gè)方法執(zhí)行之后,Loop消息循環(huán)就終止了,繼續(xù)發(fā)送消息會(huì)失敗。

Message的復(fù)用機(jī)制

Message被handler處理之后會(huì)被加入到回收池中,這個(gè)池子是一個(gè)最大大小為50的鏈表。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android Handler機(jī)制系列文章整體內(nèi)容如下: Android Handler機(jī)制1之ThreadAnd...
    隔壁老李頭閱讀 8,389評(píng)論 8 57
  • 今天我們來(lái)了解一下Handler。Android中操作UI控件需要在主線程中進(jìn)行,為了打破對(duì)主線程的依賴(將耗時(shí)操...
    PerryWong閱讀 4,241評(píng)論 2 6
  • 異步消息處理線程啟動(dòng)后會(huì)進(jìn)入一個(gè)無(wú)限的循環(huán)體之中,每循環(huán)一次,從其內(nèi)部的消息隊(duì)列中取出一個(gè)消息,然后回調(diào)相應(yīng)的消息...
    cxm11閱讀 6,522評(píng)論 2 39
  • 注:本來(lái)只是想整理成Handler部分的面試題及答案拿來(lái)背誦的,哪知一看源碼就沒停下來(lái),變成了大篇文章...本文根...
    Hoooopa閱讀 794評(píng)論 2 1
  • 過(guò)濾器生命周期 web應(yīng)用程序啟動(dòng)時(shí),web服務(wù)器創(chuàng)建Filter實(shí)例對(duì)象,以及對(duì)象初始化操作 當(dāng)請(qǐng)求訪問(wèn)與過(guò)濾器...
    磊_5d71閱讀 1,954評(píng)論 0 0

友情鏈接更多精彩內(nèi)容