Android冷启动优化
[toc]
1、冷启动时间检测
通过adb命令来检测应用冷启动时间
adb shell am start -W package/Activity路径运行结果如下所示
- TotalTime:应用的启动时间,包括创建进程+Application初始化+Activity初始化到界面显示。
- WaitTime:一般比TotalTime大点,是AMS启动Activity的总耗时。
- Android 5.0以下没有WaitTime,所以我们只需要关注TotalTime即可。
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=***/***.SplashActivity }
Warning: Activity not started, intent has been delivered to currently running top-most instance.
Status: ok
LaunchState: UNKNOWN (0)
Activity: ***/***.MainActivity
TotalTime: 785
WaitTime: 787
Complete2、冷启动时间消耗在哪
2.1、MultiDex耗时
apk的编译过程
- 1、打包资源文件,生成R.java文件(使用工具AAPT)
- 2、处理AIDL文件,生成java代码(没有AIDL则忽略)
- 3、编译 java 文件,生成对应.class文件(java compiler)
- 4、.class 文件转换成dex文件(dex)
- 5、打包成没有签名的apk(使用工具apkbuilder)
- 6、使用签名工具给apk签名(使用工具Jarsigner)
- 7、对签名后的.apk文件进行对齐处理,不进行对齐处理不能发布到Google Market(使用工具zipalign)
为什么需要使用MultiDex
在apk编译流程的第4步,将class文件转换成dex文件,默认只会生成一个dex文件,单个dex文件中的方法数不能超过65536,不然编译会报错:
