蜂巢APP启动优化实践
性能优化任重道远,虽然道路坎坷,但我们从来没有停下脚步。
文章目录
前言
时间过得很快,接触蜂巢移动版项目已经一年半了,期间项目进行过很多新功能开发,比如华为云会议,即时通讯等等。随着项目阶段的不同,也逐步进行过项目架构调整和优化,主要保证App性能,并逐渐向主流App靠拢。比如进行 项目基础架构重构 ,引入懒加载 ,统一、整合、优化图片加载框架和网络框架,迁移到AndroidX, 进程保活,部分业务逻辑代码结构、实现方式调整优化,资源优化等。
这一年半见证了蜂巢App快速发展, 从最初的20+M急剧增长到目前的60+M,业务越来越复杂,app体积也越来越大,性能问题也随之而来。比如启动性能,今天就简单记录一下优化过程。
一、启动性能
今天只说冷启动,因为这个是最耗时的。今天所说的冷启动过程是指从用户点击app图标到进入主页完全展示出来这段时间。基础知识大家可以自行查阅,本文重点在实践过程。
提前透露一下优化成果,启动时间减少了2S左右。
二、优化方法步骤
1.查看目前启动时间
因为我们这次关注的过程是 创建进程 + Application初始化+ 闪屏页Welcome初始化到界面显示的过程+主页MainActivity初始化到界面显示的过程+主页fragment显示完毕的过程,所以采用了Android Studio中 Profile 工具进行一个粗略的启动时间计算。为了方便,选取的截止时间点是ViewPager的onLayout()回调时刻。如下图,没有优化前的截图:
红框中的 00:07.170 就是这次的启动时间。好了,我们开工吧。
2.梳理耗时任务
Profile 可以清楚的看到每个过程的每个任务的CPU耗时,也就是执行耗时。不熟悉这个工具的同学可以自行查阅资料。 通过分析,找到了耗时点,然后根据业务需要,确定相应的优化策略。比如哪些可以异步,哪些可以延迟,甚至哪些可以移除,哪些需要优化等。经过分析,按照启动顺序进行优化。
Application:
由于项目引入的三方库比较多,三方库各种初始化逻辑不可控,有的时候会发现Application OnCreate() 执行多次,根据重要紧急程度区分异步策略,以及删除一些无用逻辑等,最终如下:
@Override
public void onCreate() {
super.onCreate();
if (Apputil.isMainProcess(this)) {
// Debug.startMethodTracing();
context = getApplicationContext();
initMyAsync();
initsaveinfo();
initdatabase();
initfontsize();