Android?IdleHandler使用方法詳解
正文
在Android中,Handler是一個使用的非常頻繁的東西,輸入事件機(jī)制和系統(tǒng)狀態(tài),都通過Handler來進(jìn)行流轉(zhuǎn),而在Handler中,有一個很少被人提起但是卻很有用的東西,那就是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),這是一個IdleHandler的靜態(tài)接口,可以在消息隊(duì)列沒有消息時或是隊(duì)列中的消息還沒有到執(zhí)行時間時才會執(zhí)行的一個回調(diào)。
這個功能在某些重要但不緊急的場景下就非常有用了,比如我們要在主頁上做一些處理,但是又不想影響原有的初始化邏輯,避免卡頓,那么我們就需要等系統(tǒng)閑下來的時候再來執(zhí)行我們的操作,這個時候,我們就可以通過IdleHandler來進(jìn)行回調(diào)。
它的使用也非常簡單,代碼示例如下。
Looper.myQueue().addIdleHandler {
// Do something
false
}
在Handler的消息循環(huán)中,一旦隊(duì)列里面沒有需要處理的消息,該接口就會回調(diào),也就是Handler空閑的時候。
這個接口有返回值,代表是否需要持續(xù)執(zhí)行,如果返回true,那么一旦Handler空閑,就會執(zhí)行IdleHandler中的回調(diào),而如果返回false,那么就只會執(zhí)行一次。
當(dāng)返回true時,可以通過removeIdleHandler的方式來移除循環(huán)的處理,如果是false,那么在處理完后,它自己會移除。
綜上,IdleHandler的使用主要有下面這些場景。
- 低優(yōu)先級的任務(wù)處理:替換之前為了不在初始化的時候影響性能而使用的Handler.postDelayed方法,通過IdleHandler來自動獲取空閑的時機(jī)。
- Idle時循環(huán)處理任務(wù):通過控制返回值,在系統(tǒng)空閑時,不斷重復(fù)某個操作。
但是要注意的是,如果Handler過于繁忙,那么IdleHandler的執(zhí)行時機(jī)是有可能被延遲很久的,所以,要注意一些比較重要的處理邏輯的處理時機(jī)。
在很多第三方庫里面,都有IdleHandler的使用,例如LeakCanary,它對內(nèi)存的dump分析過程,就是在IdleHandler中處理的,從而避免對主線程的影響。
以上就是Android IdleHandler使用方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Android IdleHandler的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android中自定義的dialog中的EditText無法彈出輸入法解決方案
這篇文章主要介紹了Android中自定義的dialog中的EditText無法彈出輸入法解決方案,需要的朋友可以參考下2017-04-04
Android中ViewPager實(shí)現(xiàn)滑動指示條及與Fragment的配合
這篇文章主要介紹了Android中ViewPager實(shí)現(xiàn)滑動指示條及與Fragment的配合,使用Fragment實(shí)現(xiàn)ViewPager的滑動是一種比較推薦的做法,需要的朋友可以參考下2016-03-03
Android提高之ListView實(shí)現(xiàn)自適應(yīng)表格的方法
這篇文章主要介紹了Android采用ListView實(shí)現(xiàn)自適應(yīng)表格的方法,比較實(shí)用的功能,需要的朋友可以參考下2014-08-08
Android?studio開發(fā)實(shí)現(xiàn)計算器功能
這篇文章主要為大家詳細(xì)介紹了Android?studio開發(fā)實(shí)現(xiàn)計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
Android簡單記錄和恢復(fù)ListView滾動位置的方法
這篇文章主要介紹了Android簡單記錄和恢復(fù)ListView滾動位置的方法,涉及Android針對ListView位置屬性的相關(guān)操作技巧,需要的朋友可以參考下2016-08-08
Android實(shí)戰(zhàn)項(xiàng)目之實(shí)現(xiàn)一個簡單計算器
隨著移動互聯(lián)網(wǎng)的普及,手機(jī)應(yīng)用程序已經(jīng)成為人們生活中不可或缺的一部分,計算器是一類被廣泛使用的應(yīng)用程序之一,這篇文章主要給大家介紹了關(guān)于Android實(shí)戰(zhàn)項(xiàng)目之實(shí)現(xiàn)一個簡單計算器的相關(guān)資料,需要的朋友可以參考下2023-10-10

