冷启动
click event -> IPC -> Process.start -> ActivityThread -> bindApplication -> LifeCycle -> ViewRootImplhtml
热启动
后台 -> 前台android
温启动
Lifecycleshell
Application和Activity生命周期bash
adb shell am start -W packagename/首屏Activity(含有包名)
复制代码
JamesdeMBP:~ zhanxuzhao$ adb shell am start -W com.example.demo_0227/com.example.demo_0227.SplashActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.demo_0227/.SplashActivity }
Status: ok
Activity: com.example.demo_0227/.MainActivity
ThisTime: 123
TotalTime: 285
WaitTime: 304
Complete
复制代码
ThisTime:最后一个Activity启动耗时(如MainActivity,不会包含前面的SplashActivity)
TotalTime:全部Activity启动耗时
WaitTime:AMS启动Activity总耗时
ThisTime < TotalTime < WaitTimeide
开始点:工具
Application#attachBaseContext()
复制代码
结束点:布局
**方案一:**首帧开始绘制(不推荐)post
onWindowFocusChanged
复制代码
**方案二:**真实数据展现(第一条feed加载:onBindViewHolder)性能
onBindViewHolder
holder.linearLayout.getViewTreeOvserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
@Override
public boolean onPregraw(){
LaunchTimer.endRecord();
holder.linearLayout.getViewTreeObserver().removeOnPredrwaListener(this);
return true;}
}
复制代码
Debug.startMethodTracing("fileName"); // 方法开始
Debug.stopMethodTracing(); // 方法结束
复制代码
生成文件路径:sdcard/android/data/packagename/files 优化
结合 Android 内核数据, 生成 html 报告
TraceCompat.beginSection("section name");
TraceCompat.endSection();
复制代码
特色 轻量级,开销小。 直观反映CPU利用率。