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

Android杂谈:systrace简单查看一个应用的启动流程_第1张图片
腾空.png

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

一.启动Andriod Device Monitor

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


Android杂谈:systrace简单查看一个应用的启动流程_第2张图片
Andriod Device Monitor.png

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


Android杂谈:systrace简单查看一个应用的启动流程_第3张图片
设置抓取时间和抓取内容.png

二.查看Traced

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

Android杂谈:systrace简单查看一个应用的启动流程_第4张图片
Paste_Image.png

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

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

浏览器UI线程.png

搜下源码,
/ frameworks/ base/ core/ java/ com/ android/ internal/ os/ Zygote.java
是程序跑到 forkAndSpecialize方法打出来的。
Android杂谈:systrace简单查看一个应用的启动流程_第5张图片
Paste_Image.png

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

Android杂谈:systrace简单查看一个应用的启动流程_第6张图片
Paste_Image.png

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


bindApplication.png

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


activityStart.png

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


Android杂谈:systrace简单查看一个应用的启动流程_第7张图片
Paste_Image.png

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

Android杂谈:systrace简单查看一个应用的启动流程_第8张图片
启动时间.png

总结

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

你可能感兴趣的:(Android杂谈:systrace简单查看一个应用的启动流程)