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 @   白一粥  阅读(195)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示