为什么会白屏
系统的进程没有,直到此开始,创建了应用程序的进程此过程。系统进程会显示空白屏幕,直到应用程序完成呈现活动。
启动速度由以下引起的:
1、Application的onCreate流程,对于大型的APP来说,通常会在这里做大量的通用组件的初始化操作;
建议:很多第三方SDK都放在Application初始化,我们可以放到用到的地方才进行初始化操作。
2、Activity的onCreate流程,特别是UI的布局与渲染操作,如果布局过于复杂很可能导致严重的启动性能问题;
建议:Activity仅初始化那些立即需要的对象,xml布局减少冗余或嵌套布局。
启动速度优化方案
先明确作为普通应用,App进程的创建等环节我们是无法主动控制的,可以优化的也就是Application、Activity创建以及回调等过程。
上面说到直到应用程序完成呈现活动,我们能做的就是尽快呈现活动
1、启动加速之主题切换
start_app_bg.xml
-
-
-
其中android:opacity=”opaque”参数是为了防止在启动的时候出现背景的闪烁
在启动的时候,会先展示一个界面,这个界面就是Manifest中设置的Style,等Activity加载完毕后,再去加载Activity的界面,而在Activity的界面中,我们将主题重新设置为正常的主题,从而产生一种快的感觉。不过如上文总结这种方式其实并没有真正的加速启动过程,而是通过交互体验来优化了展示的效果
2、启动加速之避免过多的初始化操作
注意检查在Application以及首屏Activity中我们做了什么
Application中主要做了各种三方组件的初始化:
1、考虑异步初始化三方组件,不阻塞主线程;
2、延迟部分三方组件的初始化;实际上我们粗粒度的把所有三方组件都放到异步任务里,可能会出现WorkThread中尚未初始化完毕但MainThread中已经使用的错误,因此这种情况建议延迟到使用前再去初始化
(可以试下,是否报错,报错后看该初始化是否能到使用前再去初始化)
3、用TraceView启动加速之定位问题
首先选择跟踪范围,在想要根据的代码片段之间使用以下两句代码
Debug.startMethodTracing("hello");
Debug.stopMethodTracing();
生成的traceview文件会自动放在SDCARD上,没有SDCARD卡会出现异常,所以使用这种方式需要确保应用的AndroidMainfest.xml中的SD卡的读写权限是打开的,其中hello是traceview文件的名字
然后用adb导出traceview文件
adb pull sdcard/hello.trace C:UserslwfDesktop
然后启动Android Device Monitor–>File–>openFile,打开traceview文件即可
关于应用启动加速,一般从以下几个方面来入手:
利用主题快速显示界面;
异步初始化组件;
梳理业务逻辑,延迟初始化组件、操作;
去掉无用代码、重复逻辑等。
参考链接:https://www.jianshu.com/p/c2d7b76ff063