启动优化

启动优化:App启动分类与流程

2019-04-11  本文已影响0人  sjandroid

目录


app启动分类

冷启动

冷启动流程图

启动流程.jpg
热启动

app启动时间统计

private void reportLaunchTimeLocked(final long curTime) {
  //ActivityRecord记录的是“已经push到ActivityTask中的Activity信息”。
  //它是Activity栈中存储的数据的“基本元素”。
    final ActivityStack stack = getStack(); 
    if (stack == null) {
        return;
    }
    final long thisTime = curTime - displayStartTime;  
    final long totalTime = stack.mLaunchStartTime != 0 
 ? (curTime - stack.mLaunchStartTime) : thisTime;
    if (SHOW_ACTIVITY_START_TIME) {
        .......
        StringBuilder sb = service.mStringBuilder;
        sb.setLength(0);
        sb.append("Displayed ");
        sb.append(shortComponentName);
        sb.append(": ");
        TimeUtils.formatDuration(thisTime, sb);
        if (thisTime != totalTime) {
            sb.append(" (total ");
            TimeUtils.formatDuration(totalTime, sb);
            sb.append(")");
        }
        Log.i(TAG, sb.toString());
    }
    .......
}
总结:

1:thisTime:表示“当前Activity从启动到第一帧绘制完毕的时间”
2:totalTime:表示“app从创建进程至栈顶Activity启动到绘制完第一帧的时间”。该时间就是“目标app的冷启动时间”。
3:如果启动的Activity不是栈顶Activity,且启动的Activity没有要显示的视图树,那么thisTime统计的时长是不等于totalTime统计的时长的。
3.1:此种情况下,thisTime只是统计的是“最后一个Activity也就是栈顶Activity”的启动到绘制完第一帧的时长。
3.2:如果最终启动的Activity就是栈顶Activity,也就是说“启动的是根Activity”此种情况下thisTime统计的时长与totalTime一致。

4:waitTime:表示“总耗时”,其中包括 系统创建app进程前的操作耗时+app启动总耗时。
5:waitTime、totalTime、thisTime 3者时长关系:waitTime>totalTime>=thisTime。
6:displat-time:logcat中输出的displatTime就是thisTime。
7:total-time:logcat中输出的totle就是totlaTime。


App启动主要流程(详细介绍请戳这里)

app启动流程总体上分为:

问题

1:App冷启动时间到底是如何计算、触发的?

参考:

https://developer.android.com/topic/performance/vitals/launch-time
https://blog.csdn.net/qian520ao/article/details/81908505
https://www.androidperformance.com/2015/12/31/How-to-calculation-android-app-lunch-time/

上一篇下一篇

猜你喜欢

热点阅读