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卡顿

 

  

 

posted @ 2021-01-17 01:02  白一粥  阅读(205)  评论(0)    收藏  举报