https://blog.csdn.net/jdsjlzx/article/details/110532500
IdleHandler 主要是在 MessageQueue 出现空闲的时候被执行,那么何时出现空闲?
MessageQueue 是一个基于消息触发时间的优先级队列,所以队列出现空闲存在两种场景。
- MessageQueue 为空,没有消息;
- 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