1、合理利用多线程,核心线程数的设置。利用Systrace辅助查看各任务的启动时间耗时
cpu time:真正使用的时间。(数据小为IO密集型操作,可以随便开线程开启该任务,如使用线程池的newCachedThreadPool。)
wall time:包含等待的时间片。(就绪状态:等待时间片的到来。或者阻塞状态:主动的等待条件)
2、延迟初始化(不重要的任务)
3、IdleHandler
4、sp优化:优先使用apply;分多个文件存储;editor替换多次提交;在Application提早初始化;
5、启动阶段不启动子进程
6、提前异步类加载,class.forName或者new对象。思路是替换系统的classLoader,打印出来。
按照任务的依赖关系,进行拓扑排序,然后按照是否必须运行在主线程,用对应的线程池或者handler执行任务,简化启动的代码。
拓扑排序示例:
运行效果:
使用方式:
Initiator.getInstance() .addTask(new C14()) .addTask(new C13()) .addTask(new C12()) .addTask(new C11()) .addTask(new C10()) .addTask(new C9()) .addTask(new C8()) .addTask(new C7()) .addTask(new C3()) .addTask(new C2()) .addTask(new C1()) .start();项目地址:https://github.com/Ulez/Initiator
