建立标准
、 分析现状
、 抓大放小
三个步骤。common
、 interactive
两部分占去了大部分的时间,这是启动器在执行启动任务。而在进入首页后,页面的请求与view的排版占用了大部分的时间。common
与 interactive
属于启动器执行任务的两个阶段,它们都会让主线程等待阶段中的任务全部执行完,所以这两个阶段的任务,我们叫它 阻塞型任务
。部分任务延迟执行
降低任务本身的耗时
拆分大任务
危险的边缘
疯狂试探。queueIdle
回调之后触发。而它的执行占用了多过的系统资源,造成CPU占用、网络请求排队、IO密集等问题。最终导致主线程、渲染变慢的情况。queueIdle
回调,并启动一个延迟6s的runnable作为”备份“,防止message queue过忙长时间无法触发非阻塞阶段的任务。method trace
进行更细粒度的分析。对于IO出来的值,尽量做内存缓存,避免多次IO
避免产生大的SharedPreference文件,尽可能将对commit的调用换成apply
注意一些异步接口回调的线程,如果是主线程,也需要保证回调后的代码快速执行完
广告页
数据预加载
View预创建
对启动时候的资源消耗进行整理,减少不必要的网络请求与IO以及线程切换。
对启动器中的线程负载进行优化,目前启动的任务分配方式距离理论上的最优值(平均值)大约还有50%的空间。
使用dex-relayout、PGO加速启动