【问题标题】:What does "I/ActivityManager: Displayed...activity...+850ms" comprised of?“I/ActivityManager: Displayed...activity...+850ms”由什么组成?
【发布时间】:2015-09-29 12:53:56
【问题描述】:

我正在尝试改进应用活动的显示时间。
我正在使用 logcat 来跟踪我的活动显示时间。

以下是 logcat 输出的示例:

I/ActivityManager(1097):显示的 com.example.myapp/com.example.myapp.activity.TutorialActivity:+850 毫秒(总计 +1 秒 503 毫秒)

谁能告诉我活动经理如何得出这是显示活动所需的时间?
这段时间会发生什么,这段时间考虑了什么?
“正常时间”和“总时间”有什么区别?

我试图找到有关此事的材料,但没有成功..

提前致谢!

【问题讨论】:

    标签: android android-logcat activity-manager


    【解决方案1】:

    这一行打印在com.android.server.am.ActivityRecord.reportLaunchTimeLocked:

    private void reportLaunchTimeLocked(final long curTime) {
        final ActivityStack stack = task.stack;
        final long thisTime = curTime - displayStartTime;
        final long totalTime = stack.mLaunchStartTime != 0
                ? (curTime - stack.mLaunchStartTime) : thisTime;
        if (ActivityManagerService.SHOW_ACTIVITY_START_TIME) {
            Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, "launching", 0);
            EventLog.writeEvent(EventLogTags.AM_ACTIVITY_LAUNCH_TIME,
                    userId, System.identityHashCode(this), shortComponentName,
                    thisTime, totalTime);
            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(ActivityManagerService.TAG, sb.toString());
        }
        mStackSupervisor.reportActivityLaunchedLocked(false, this, thisTime, totalTime);
        if (totalTime > 0) {
            //service.mUsageStatsService.noteLaunchTime(realActivity, (int)totalTime);
        }
        displayStartTime = 0;
        stack.mLaunchStartTime = 0;
    }
    

    “正常时间”基本上是Activity即将启动和Activity的内容视图被绘制之间的时间(包括绘制时间)。

    “总时间”包括“正常时间”,还考虑了启动之前Activitys所花费的时间。

    通常,“正常时间”与“总时间”相同。从源码中可以看到

    if (thisTime != totalTime) {
           sb.append(" (total ");
           TimeUtils.formatDuration(totalTime, sb);
           sb.append(")");
     }
    

    “总时间”只有在与“正常时间”不同时才会打印。通常,如果在Activity A的onCreate启动Activity B,Activity B的“正常时间”会与“总时间”不同。

    【讨论】:

      猜你喜欢
      • 2022-12-27
      • 2022-12-27
      • 1970-01-01
      • 2017-09-23
      • 2022-07-13
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      相关资源
      最近更新 更多