启动方式
冷启动
热启动
温启动
- 会重新走Activity的生命周期
优化方向
- Application和Activity的生命周期
adb命令获取启动时间
- adb shell am start -W packagename/com.xxx.xxx.首屏Activity
- ThisTime 最后一个Activity启动耗时
- TotalTime 所有Activity启动耗时
- WaitTime AMS启动Activity的总耗时
- 局限性
手动埋点计算启动时间
- onWindowFocusChanged Activity的首帧但是数据可能没显示出来
- 应把数据完全显示出来作为结束时间
public class LaunchTimer {
private static long sTime;
public static void startRecord() { //开始时间
sTime = System.currentTimeMillis();
}
public static void endRecord() {//结束时间
endRecord("");
}
// 在界面可见的时候数据显示出来的时候调用,表示app启动完成可用
public static void endRecord(String msg) { //加tag的结束时间
long cost = System.currentTimeMillis() - sTime;
LogUtils.i(msg + "cost " + cost);
}
}
- 精确,可以带到上线,推荐使用
- addOnDrawListerner要求API16
常用的工具
traceview
- 图形展示执行时间 ,调用栈等信息
- 信息全面,包含所有线程
- 代码埋点
使用方式
- Debug.startMethodTracing(“文件名”);//默认文件大小 8m
- Debug.stopMethodTracing();
- 生成文件在手