APP启动时白屏时间过长问题的优化


一、App启动分类

1、冷启动
App在后台被清除或者第一次启动时,此启动方式,从点击应用图标到显示界面会经历以下过程:
这里写图片描述
2、暖启动
3、热启动
这两种启动一般不会出现较长的白屏时间,这里不做考虑,也可以参考冷启动优化方式。

二、白屏时间主要影响因素

1、设备性能
2、App的进程个数
3、白屏的Total Time : Application的onCreate()执行时间 + Activity的onCreate()执行时间

对于一个大型的App来说,通常会把相关的第三方SDK的初始化置于Application的onCreate()方法中。

三、解决办法

1、由于白屏总时间等于Application的onCreate()执行时间 + Activity的onCreate()执行时间,所以不要在这两处方法中进行耗时操作,可以将其推后执行或放在子线程中执行。

2、对于多进程的应用来说,每新建一个进程就会初始化Application一次,即会执行Application的onCreate()方法多次,所以将只需要在主进程中初始化的方法推后至Activity的onCreate()中执行。对于只在特定进程中需要初始化的部分方法,可以在Application的onCreate()方法中依据进程名去判断是否需要执行初始化。

3、如果在初始化过程中需要读取自定义Prop配置文件或者SharedPref缓存,若配置较多则将启动应用所必需的部分单独初始化。

四、调试

1、在Studio的日志窗,输入Tag关键字:Display
则可以看到应用自点击图标至渲染出画面所耗时间。下图即为个人调试应用优化前后的Display时间:
优化前:
这里写图片描述
优化后:
这里写图片描述

2、精确调试某段代码执行时间
在需要测算执行时间的那段代码前后加上:

        Debug.startMethodTracing("name");
        /** start 需要测算执行时间的代码段*/
        ......
        /** end 需要测算执行时间的代码段*/
        Debug.stopMethodTracing();

然后运行App后会在设备的SD卡根目录下生成name.trace文件,用Android Studio可以将此文件打开,从而得到这段代码的执行时间详细参数,例如下:

这里写图片描述

图中上半部分为各方法执行时间统计图,下方为各个方法详细的执行时间参数(包含其子方法),其中各列参数含义:

Name Invocation Count Inclusive Time (us) Exclusive Time (us)
方法名 方法调用次数 该方法及其调用的子方法的耗时 该方法(不包含调用的子方法)的耗时

.
.
.

以上,欢迎补充。

猜你喜欢

转载自blog.csdn.net/kiddingboy_wjj/article/details/78669831