
建立标准、
分析现状、
抓大放小三个步骤。

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加速启动

文章转载自闲鱼技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




