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卡顿
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】