Android杂谈:systrace简单查看一个应用的启动流程

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
腾空.png

systrace是用来查看应用和系统运行状态的工具,利用他可以分析一些性能问题。例如查看应用是否卡顿,卡在那个方法了之类的问题。本文简单抓一个浏览器启动的systrace随便看看吧。

一.启动Andriod Device Monitor

连接手机,启动Andriod Device Monitor,点击一下下图箭头指向那个图标

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
Andriod Device Monitor.png

设置抓取时间和抓取内容,点击OK就开始抓取了,随意启动操作下浏览器,5s后trace.html就生成了。

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
设置抓取时间和抓取内容.png
二.查看Traced

生成的trace.html要用chrome浏览器打开,浏览器输入网址输入chrome://tracing/,然后把trace.html拉进去就可以了。结果如下。

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
Paste_Image.png

整个视图布局:
1.CPU占用情况,上图可以看到有8个cpu
2.进程trace
3.每个进程的线程trace,线程主要看下主线程,即UI线程。

看下浏览器UI线程的流程,大概了解下浏览器启动的流程。
首先是出现“POSTFORK”,这个其实是在Fork一个子进程,谁的子进程呢?Zoygote的。

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
浏览器UI线程.png

搜下源码,
/frameworks/base/core/java/com/android/internal/os/Zygote.java
是程序跑到forkAndSpecialize方法打出来的。

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
Paste_Image.png

然后依次是
RuntimeInit :准备虚拟机资源
ActivityThreadMain :Activity主线程入口

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
Paste_Image.png

bindApplication:建立AMS与应用的binder通信,可以看到他执行了很多子方法,包括打开应用的odex,资源等

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
bindApplication.png

activityStart:这是回调onactivitystart了,但这时界面应该还是不可见的。

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
activityStart.png

看下图,activityStart执行后,渲染线程RenderThread才开始工作,所以这是才开始渲染,界面才开始可见。

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
Paste_Image.png

那这个应用启动花了多少时间了?我们看一下,以POSTFORK到activityStart为准,总共花了615.176ms!!!!牛逼!!

Android杂谈:systrace简单查看一个应用的启动流程 - 阿里云
启动时间.png
总结

这篇文章,介绍了systrace的抓取与查看方法。简单分析了下一个应用启动的systrace。用处不大,仅供吐槽。