IdelHandler

 IdleHandler类可以用于监控MessageQueue队列是否为空, 当MessageQueue队列为空时,可以根据回调方法queueIdle()执行一些操作

 

IdelHandler定义

/**
     * 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();
    }
IdleHandler是一个用于获取Looper线程准备进入阻塞等到更多Message的回调接口

queueIdle
方法的注释, 说了2点:
1.调用时机:当MessageQueue消息队列为空时会调用; 最后还说了如果有延时消息的时候(执行时间比当前时间要晚)也会执行;
2.返回值含义:返回true时会使MessageQueue保持IdleHandler 的引用,等待下次消息队列为空时继续执行;返回false时则会将IdleHandler从MessageQueue中移除;

 

使用:

Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
            @Override
            public boolean queueIdle() {
                //根据返回值决定,下一次MessageQueue为空时是否调用当前实例的queueIdle方法
                //返回false时当前实例会被清除出MessageQueue;返回true则不会,当下一次MessageQueue为空值还会继续调用当前实例的queueIdle方法
                return false;
            }
        });

 

 一些常见的使用场景:

1.计算Activity实际显示View所耗费的时间

2.线程的并发控制-通过单线程+ 消息队列来实现线程安全控制。

 

转载于:https://www.cnblogs.com/10ydaydream/p/9376651.html

你可能感兴趣的:(IdelHandler)