11

アプリのアクティビティの表示時間を改善しようとしています。
アクティビティの表示時間を追跡するために logcat を使用しています。

logcat の出力例を次に示します。

I/ActivityManager( 1097): 表示された com.example.myapp/com.example.myapp.activity.TutorialActivity: +850ms (合計 +1s503ms)

アクティビティ マネージャーは、これがアクティビティを表示するのにかかる時間であるとどのように結論付けたのか教えてもらえますか?
この間に何が起こり、この時間には何が考慮されますか?
また、「通常時間」と「合計時間」の違いは何ですか?

この件に関する資料を見つけようとしましたが、成功しませんでした..

よろしくお願いします!

4

1 に答える 1

15

この行は次のように印刷され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時間です (描画時間を含む)。

「合計時間」には「通常の時間」が含まれ、以前の s の起動にかかった時間も考慮されますActivity

通常、「通常時間」は「合計時間」と同じです。ソースコードを見ればわかる

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

「合計時間」は「通常時間」と異なる場合のみ出力されます。通常、アクティビティ A の中でアクティビティ B が起動された場合、アクティビティ BonCreateの「通常の時間」は「合計時間」とは異なります。

于 2015-11-20T07:50:39.453 に答える