在初始化的时候,不少子任务不须要在Activity的onCreate()方法以前执行,所以,能够将这些子任务延时到初始化结束后执行。ide
(1)使用: new Handler().postDelayed(Runnable r, long delayMillis);oop
缺点:
(1)时机不便控制
(2)用户持续操做时,任然会卡顿post
核心思想:对延时任务进行分批初始化this
利用 IdleHandler 特性,空闲执行。spa
public class DelayInitDispatcher { private Queue<Task> mDelayTasks = new LinkedList<>(); private MessageQueue.IdleHandler mIdleHandler = new MessageQueue.IdleHandler() { @Override public boolean queueIdle() { 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); } }
在调用的地方执行下面的代码:code
DelayInitDispatcher delayInitDispatcher = new DelayInitDispatcher(); delayInitDispatcher.addTask(new DelayInitTaskA()) .addTask(new DelayInitTaskB()) .start();
优势:
(1)执行时机明确
(2)缓解启动卡顿it