App Launch#
Android Official Documentation:
App Launch Time | App quality | Android Developers (google.cn)
Launch Time Statistics#
1. Use perfetto#
2 Use Command#
>adb shell am start -S -W com.xiaopeng.musicradio/com.xiaopeng.musicradio.home.view.HomeActivity
Stopping: com.xiaopeng.musicradio
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.xiaopeng.musicradio/.home.view.HomeActivity }
Status: ok
LaunchState: COLD
Activity: com.xiaopeng.musicradio/.home.view.HomeActivity
TotalTime: 2602
WaitTime: 2609
Complete
C:\Users\Xpeng>adb shell am start -S -W com.xiaopeng.musicradio/com.xiaopeng.musicradio.home.view.HomeActivity
Stopping: com.xiaopeng.musicradio
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.xiaopeng.musicradio/.home.view.HomeActivity }
Status: ok
LaunchState: COLD
Activity: com.xiaopeng.musicradio/.home.view.HomeActivity
TotalTime: 2642
WaitTime: 2657
Complete
adb shell am start -S -W com.xiaopeng.musicradio/com.xiaopeng.musicradio.home.view.HomeActivity
Stopping: com.xiaopeng.musicradio
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.xiaopeng.musicradio/.home.view.HomeActivity }
Status: ok
LaunchState: COLD
Activity: com.xiaopeng.musicradio/.home.view.HomeActivity
TotalTime: 2634
WaitTime: 2649
Complete
package com.xiaopeng.utils;
import android.os.Debug;
import android.text.TextUtils;
/**
* Do not use this class in the production environment
*/
public class TraceMethodUtils {
/**
* Suitable for very precise recording, time consumption analysis of a specific function
*
* In profiler cpu, the instrument mode will continuously record method/cpu usage from the start, which has a significant impact on performance.
*/
@Deprecated
public static void startTrack(String tracFileName){
Debug.startMethodTracing(fixTraceFileName(tracFileName));
}
/**
* Used after Android 5.0, with interval time in milliseconds
*
* In profiler cpu, the sample mode periodically records the call stack with system intervals in microseconds, which has a small impact on performance
* @param tracFileName
*/
@Deprecated
public static void startSampleTrack(String tracFileName){
//1000us=1ms records periodically
Debug.startMethodTracingSampling(fixTraceFileName(tracFileName),50,1000);
}
@Deprecated
private static String fixTraceFileName(String tracFileName){
if (!TextUtils.isEmpty(tracFileName)){
tracFileName=tracFileName.endsWith(".trace")?tracFileName:tracFileName+".trace";
tracFileName=new StringBuilder().append(System.currentTimeMillis()).append("_").append(tracFileName).toString();
}else{
tracFileName=new StringBuilder().append(System.currentTimeMillis()).append(".trace").toString();
}
return tracFileName;
}
/**
* End tracking
*/
@Deprecated
public static void stopTrack(){
Debug.stopMethodTracing();
}
}