Android?IdleHandler使用方法詳解
正文
在Android中,Handler是一個(gè)使用的非常頻繁的東西,輸入事件機(jī)制和系統(tǒng)狀態(tài),都通過(guò)Handler來(lái)進(jìn)行流轉(zhuǎn),而在Handler中,有一個(gè)很少被人提起但是卻很有用的東西,那就是IdleHandler,它的源碼如下。
/** * Callback interface for discovering when a thread is going to block * waiting for more messages. */ public static interface IdleHandler { /** * Called when the message queue has run out of messages and will now * wait for more. Return true to keep your idle handler active, false * to have it removed. This may be called if there are still messages * pending in the queue, but they are all scheduled to be dispatched * after the current time. */ boolean queueIdle(); }
從注釋我們就能發(fā)現(xiàn),這是一個(gè)IdleHandler的靜態(tài)接口,可以在消息隊(duì)列沒(méi)有消息時(shí)或是隊(duì)列中的消息還沒(méi)有到執(zhí)行時(shí)間時(shí)才會(huì)執(zhí)行的一個(gè)回調(diào)。
這個(gè)功能在某些重要但不緊急的場(chǎng)景下就非常有用了,比如我們要在主頁(yè)上做一些處理,但是又不想影響原有的初始化邏輯,避免卡頓,那么我們就需要等系統(tǒng)閑下來(lái)的時(shí)候再來(lái)執(zhí)行我們的操作,這個(gè)時(shí)候,我們就可以通過(guò)IdleHandler來(lái)進(jìn)行回調(diào)。
它的使用也非常簡(jiǎn)單,代碼示例如下。
Looper.myQueue().addIdleHandler { // Do something false }
在Handler的消息循環(huán)中,一旦隊(duì)列里面沒(méi)有需要處理的消息,該接口就會(huì)回調(diào),也就是Handler空閑的時(shí)候。
這個(gè)接口有返回值,代表是否需要持續(xù)執(zhí)行,如果返回true,那么一旦Handler空閑,就會(huì)執(zhí)行IdleHandler中的回調(diào),而如果返回false,那么就只會(huì)執(zhí)行一次。
當(dāng)返回true時(shí),可以通過(guò)removeIdleHandler的方式來(lái)移除循環(huán)的處理,如果是false,那么在處理完后,它自己會(huì)移除。
綜上,IdleHandler的使用主要有下面這些場(chǎng)景。
- 低優(yōu)先級(jí)的任務(wù)處理:替換之前為了不在初始化的時(shí)候影響性能而使用的Handler.postDelayed方法,通過(guò)IdleHandler來(lái)自動(dòng)獲取空閑的時(shí)機(jī)。
- Idle時(shí)循環(huán)處理任務(wù):通過(guò)控制返回值,在系統(tǒng)空閑時(shí),不斷重復(fù)某個(gè)操作。
但是要注意的是,如果Handler過(guò)于繁忙,那么IdleHandler的執(zhí)行時(shí)機(jī)是有可能被延遲很久的,所以,要注意一些比較重要的處理邏輯的處理時(shí)機(jī)。
在很多第三方庫(kù)里面,都有IdleHandler的使用,例如LeakCanary,它對(duì)內(nèi)存的dump分析過(guò)程,就是在IdleHandler中處理的,從而避免對(duì)主線程的影響。
以上就是Android IdleHandler使用方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Android IdleHandler的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android實(shí)現(xiàn)短信、微信、微博分享功能
微信、微博分享功能大家都體驗(yàn)過(guò)吧,非常方便我們的生活,下面通過(guò)本文給大家介紹Android實(shí)現(xiàn)短信、微信、微博分享功能,需要的朋友參考下吧2017-12-12解決Android studio xml界面無(wú)法預(yù)覽問(wèn)題
這篇文章主要介紹了解決Android studio xml界面無(wú)法預(yù)覽問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Android實(shí)現(xiàn)EditText添加下劃線
這篇文章主要為大家詳細(xì)介紹了Android如何實(shí)現(xiàn)給EditText添加下劃線,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Android自定義Style實(shí)現(xiàn)方法
Android自定義Style實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-06-06Android?Flutter實(shí)現(xiàn)任意拖動(dòng)的控件
使用flutter開(kāi)發(fā)是需要控件能拖動(dòng),比如畫板中的元素,或者工具條等,所以本文為大家準(zhǔn)備了Flutter實(shí)現(xiàn)任意拖動(dòng)控件的示例代碼,希望對(duì)大家有所幫助2023-07-07Android實(shí)現(xiàn)聯(lián)動(dòng)下拉框 下拉列表spinner的實(shí)例代碼
這篇文章介紹了Android實(shí)現(xiàn)聯(lián)動(dòng)下拉框 下拉列表spinner的實(shí)例代碼,有需要的朋友可以參考一下2013-10-10Android學(xué)習(xí)筆記——Menu介紹(一)
Android3.0(API level 11)開(kāi)始,Android設(shè)備不再需要專門的菜單鍵。隨著這種變化,Android app應(yīng)該取消對(duì)傳統(tǒng)6項(xiàng)菜單的依賴。取而代之的是提供anction bar來(lái)提供基本的用戶功能2014-10-10詳解Android ConstraintLayout 約束布局的用法
本篇文章主要介紹了詳解Android ConstraintLayout 約束布局的用法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02Android實(shí)現(xiàn)類似execel的表格 能回顯并能修改表格內(nèi)容的方法
今天小編就為大家分享一篇Android實(shí)現(xiàn)類似execel的表格 能回顯并能修改表格內(nèi)容的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08