系统日志统计
在 Android 4.4(API 级别 19)及更高版本中,logcat 包含一个输出行,其中包含名为 Displayed 的值。此值代表从启动进程到在屏幕上完成对应 Activity 的绘制所用的时间
ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms |
如果我们使用异步懒加载的方式来提升程序画面的显示速度,这通常会导致的一个问题是,程序画面已经显示,同
时 Displayed 日志已经打印,可是内容却还在加载中。为了衡量这些异步加载资源所耗费的时间,我们可以在异
步加载完毕之后调用 activity.reportFullyDrawn() 方法来让系统打印到调用此方法为止的启动耗时
adb 命令统计
adb shell
am start -S -W packagename/launchActivity
options参数
1 -D:开启debug模式
2 -W:等待启动完成
3 --start-profiler<FILE>:将profiler中的结果输出到指定文件中
4 -P:和--start-profiler一样,区别在于,在app进入idle状态时profiler结束
5 -R <Count>: 重复启动Activity,但每次重复启动都会关闭掉最上面的Activity
6 -S:关闭Activity所属的App进程后再启动Activity
7 --opengl-trace:开启OpenGL tracing
启动完成后,将输出:
ThisTime: 415
TotalTime: 415
WaitTime: 437
WaitTime:总的耗时,包括前一个应用Activity pause的时间和新应用启动的时间;
ThisTime表示一连串启动Activity的最后一个Activity的启动耗时;
TotalTime表示新应用启动的耗时,包括新进程的启动和Activity的启动,但不包括前一个应用Activity pause的耗时
开发者一般只要关心TotalTime即可,这个时间才是自己应用真正启动的耗时
CPU Profile/TraceView
Sample Java Methods
对 Java 方法采样:在应用的 Java 代码执行期间,频繁捕获应用的调用堆栈。分析器会比较捕获的数据集,以推导与应用的 Java 代码执行有关的时间和资源使用信息。如果应用在捕获调用堆栈后进入一个方法并在下次捕获前退出该方法,分析器将不会记录该方法调用。如果您想要跟踪生命周期如此短的方法,应使用检测跟踪。
Trace Java Methods
跟踪 Java 方法:在运行时检测应用,以在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和 CPU 使用率。
Sample C/C++ Functions
对 C/C++ 函数采样:捕获应用的原生线程的采样跟踪数据。要使用此配置,您必须将应用部署到搭载Android 8.0(API 级别 26)或更高版本的设备上。
Trace System Calls
跟踪系统调用:捕获非常翔实的细节,以便您检查应用与系统资源的交互情况。您可以检查线程状态的确切时间和持续时间、直观地查看所有内核的 CPU 瓶颈在何处,并添加要分析的自定义跟踪事件。要使用此配置,您必须将应用部署到搭载 Android 7.0(API 级别 24)或更高版本的设备上。此跟踪配置在 systrace 的基础上构建而成。您可以使用 systrace 命令行实用程序指定除 CPU Profiler 提供的选项之外的其他选项。systrace 提供的其他系统级数据可帮助您检查原生系统进程并排查丢帧或帧延迟问题
Debug API
除了直接使用 Profile 启动之外,我们还可以借助Debug API生成trace文件
public class MyApplication extends Application {
public MyApplication() {
Debug.startMethodTracing("enjoy");
} /
/.....
}
public class MainActivity extends AppCompatActivity {
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Debug.stopMethodTracing();
} /
/.......
}
运行App,则会在sdcard中生成一个enjoy.trace文件(需要sdcard读写权限)。将手机中的trace文件保存至电
脑,随后拖入Android Studio即可