延时最优
在初始化的时候,很多子任务不需要在Activity的onCreate()方法之前执行,因此,可以将这些子任务延时到初始化结束后执行。
常规方法
(1)使用: new Handler().postDelayed(Runnable r, long delayMillis);
缺点:
(1)时机不便控制
(2)用户持续操作时,任然会卡顿
更优方案
核心思想:对延时任务进行分批初始化
利用 IdleHandler 特性,空闲执行。
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);
}
}
在调用的地方执行下面的代码:
DelayInitDispatcher delayInitDispatcher = new DelayInitDispatcher();
delayInitDispatcher.addTask(new DelayInitTaskA())
.addTask(new DelayInitTaskB())
.start();
优点:
(1)执行时机明确
(2)缓解启动卡顿