systrace是用来查看应用和系统运行状态的工具,利用他可以分析一些性能问题。例如查看应用是否卡顿,卡在那个方法了之类的问题。本文简单抓一个浏览器启动的systrace随便看看吧。
一.启动Andriod Device Monitor
连接手机,启动Andriod Device Monitor,点击一下下图箭头指向那个图标
设置抓取时间和抓取内容,点击OK就开始抓取了,随意启动操作下浏览器,5s后trace.html就生成了。
二.查看Traced
生成的trace.html要用chrome浏览器打开,浏览器输入网址输入chrome://tracing/,然后把trace.html拉进去就可以了。结果如下。
整个视图布局:
1.CPU占用情况,上图可以看到有8个cpu
2.进程trace
3.每个进程的线程trace,线程主要看下主线程,即UI线程。
看下浏览器UI线程的流程,大概了解下浏览器启动的流程。
首先是出现“POSTFORK”,这个其实是在Fork一个子进程,谁的子进程呢?Zoygote的。
搜下源码,
/frameworks/base/core/java/com/android/internal/os/Zygote.java
是程序跑到forkAndSpecialize方法打出来的。
然后依次是
RuntimeInit :准备虚拟机资源
ActivityThreadMain :Activity主线程入口
bindApplication:建立AMS与应用的binder通信,可以看到他执行了很多子方法,包括打开应用的odex,资源等
activityStart:这是回调onactivitystart了,但这时界面应该还是不可见的。
看下图,activityStart执行后,渲染线程RenderThread才开始工作,所以这是才开始渲染,界面才开始可见。
那这个应用启动花了多少时间了?我们看一下,以POSTFORK到activityStart为准,总共花了615.176ms!!!!牛逼!!
总结
这篇文章,介绍了systrace的抓取与查看方法。简单分析了下一个应用启动的systrace。用处不大,仅供吐槽。