APP初始化优化(延迟初始化)
常见初始化痛点
1、可以通过延迟初始化(通过回调)来达到让主线程来少干活,提高性能 ,但是时机不便控制,仍然会对Feed滑动过程有卡顿
2、更优方案:(对上一种方法的升级)
核心思想:对延迟任务进行分批初始化,当空闲时再去初始化
利用IdleHandler特性,消息队列空闲时进行初始化工作。
实现方式:
public class DelayInitDispatcher{
private Queue<Task> delayTasks = new LinkedList<>();
private MessageQueue.IdleHandler idlHandler = new MessageQueue.IdleHandler{
@Override
public final boolean queueIdle(){
if(delayTasks.size()>0){
Task task = delayTasks.poll();
new DispatchRunnable(task).run();
}
return delayTasks.isEmpty();
}
};
public DelayInitDispatcher addTask(Task task){
delayTasks.add(task);
return this;
}
public void start(){
Looper.myQueue().addIndleHandler(idlHandler);
}
}
调用:(自己判断当主线程布局初始化完之后调用,可利用回调函数进行调用)
@Override
public void onFeedShow(){ //这个是自己定义的一个回调函数
DelayInitDispatcher delayInitDispatcher = newDelayInitDispatcher();
delayInitDispatcher .addTask(new DelatyInitTaskA())
.addTask(new DelayInitTaskB())
.start();
}
这种更优方案优点:
执行时机明确
缓解Feed卡顿

浙公网安备 33010602011771号