其实这种方式并没有真正的加速应用进程的启动速度,而只是通过用户视觉效果带来的优化体验。
_3_代码优化
当然上面使用设置主题的方式优化用户体验效果治标不治本,关键还在于对代码的优化。
首先我们可以统计一下应用冷启动的时间。
adb 命令统计
参考如何计算 App 的启动时间
http://www.androidperformance.com/2015/12/31/How-to-calculation-android-app-lunch-time/
adb命令 : adb shell am start -S -W 包名/启动类的全限定名 , -S 表示重启当前应用
更多adb命令
https://github.com/mzlogin/awesome-adb
C:\Android\Demo>adb shell am start -S -W com.example.moneyqian.demo/com.example.moneyqian.demo.MainActivity
Stopping: com.example.moneyqian.demo
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.moneyqian.demo/.MainActivity }
Status: ok
Activity: com.example.moneyqian.demo/.MainActivity
ThisTime: 2247
TotalTime: 2247
WaitTime: 2278
Complete
-
ThisTime : 最后一个 Activity 的启动耗时(例如从 LaunchActivity - >MainActivity「adb命令输入的Activity」 , 只统计 MainActivity 的启动耗时)
-
TotalTime : 启动一连串的 Activity 总耗时.(有几个Activity 就统计几个)
-
WaitTime : 应用进程的创建过程 + TotalTime .
-
在第①个时间段内,AMS 创建 ActivityRecord 记录块和选择合理的 Task、将当前Resume 的 Activity 进行 pause.
-
在第②个时间段内,启动进程、调用无界面 Activity 的 onCreate() 等、 pause/finish 无界面的 Activity.
-
在第③个时间段内,调用有界面 Activity 的 onCreate、onResume.
//ActivityRecord
private void reportLaunchTimeLocked(final long curTime) {
final long thisTime = curTime - displayStartTime;
final long totalTime = stack.mLaunchStartTime != 0 ?
(curTime - stack.mLaunchStartTime) : thisTime;
}
最后总结一下 : 如果需要统计从点击桌面图标到 Activity 启动完毕,可以用WaitTime作为标准,但是系统的启动时间优化不了,所以优化冷启动我们只要在意 ThisTime 即可。
系统日志统计
另外也可以根据系统日志来统计启动耗时,在Android Studio中查找已用时间,必须在logcat视图