首页 > 其他分享 >IdelHandler介绍及使用

IdelHandler介绍及使用

时间:2022-11-13 12:44:27浏览次数:70  
标签:task IdleHandler MessageQueue 介绍 mDelayTasks 使用 IdelHandler public 空闲

https://blog.csdn.net/jdsjlzx/article/details/110532500

IdleHandler 主要是在 MessageQueue 出现空闲的时候被执行,那么何时出现空闲?

MessageQueue 是一个基于消息触发时间的优先级队列,所以队列出现空闲存在两种场景。

  1. MessageQueue 为空,没有消息;
  2. MessageQueue 中最近需要处理的消息,是一个延迟消息(when>currentTime),需要滞后执行;

这两个场景,都会尝试执行 IdleHandler。

/**
 * 延迟初始化分发器
 */
public class DelayInitDispatcher {

    private Queue<Task> mDelayTasks = new LinkedList<>();

    private MessageQueue.IdleHandler mIdleHandler = new     MessageQueue.IdleHandler() {
        @Override
        public boolean queueIdle() {
            // 分批执行的好处在于每一个task占用主线程的时间相对
            // 来说很短暂,并且此时CPU是空闲的,这些能更有效地避免UI卡顿
            if(mDelayTasks.size()>0){
                Task task = mDelayTasks.poll();
                new DispatchRunnable(task).run();
            }
            return !mDelayTasks.isEmpty();
        }
    };

    public DelayInitDispatcher addTask(Task task){
        mDelayTasks.add(task);
        return this;
    }

    public void start(){
        Looper.myQueue().addIdleHandler(mIdleHandler);
    }

}

 

标签:task,IdleHandler,MessageQueue,介绍,mDelayTasks,使用,IdelHandler,public,空闲
From: https://www.cnblogs.com/zuiniub/p/16885776.html

相关文章