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。用处不大,仅供吐槽。

    原文作者:九九叔
    原文地址: https://www.jianshu.com/p/d990e38b9282
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞