trace - 看点击桌面发生了什么

61 阅读2分钟

面试:你对App启动流程有了解吗?


来外包前

面试都会问这个,我像很多人和我一样直接啃源码;

可能是应用做多了,我更喜欢看得见的东西;

于是我开始画图

【此处留个坑,后面填,app启动图】

画完的确熟悉很多,但是噼里啪啦的一顿说,没有实际东西去用我总感觉浮在水面上,脚不踏实;

于是今天我从trace 的角度来分析下 app的启动流程;


首先还是先丢个链接出来: www.jianshu.com/p/37370c1d1… (感谢这位老哥的分享)

我先啃为敬:

啃完后,我是这样理解的;

屏幕点击触发就是个发快递的过程

Input 是需要发送的快递; 先要把快递"樱扑特"( input )放到快递柜 "伊文特哈布"(EventHub),

然后快递员 "樱扑特-瑞德"(InputReader)把快递柜(EventHub)中取出来,拉回快递站"樱扑特-迪斯帕奇儿"(InputDispatcher)进行包装 打上标签后,分发到传送带(InboundQueue=iq)上,然后装车 “奥特-邦德-Q油”(OutboundQueue)发货;

咻的一声,你的快递就到了目标的城市app ,在目标城市等待分发“维特-Q油”WaitQueue,然后目标城市的快递站开始分发"弟雷武-英蒲特-伊文特"(deliverInputEvent)进行分发,然app的快递员InputResponse 就把input 交到 app 的view 上;

这就是整个触发过程;

【博主,你是个人才!答:被逼的。。。】

上面就是个大体印象,类似那个宫殿记忆法,把东西映射到现实中容易记忆;


知识点 1: 整个流程

大体上就是

input产生事件 ->eventhub 快递柜 ->InputReader取件-> inputdispatcher 分捡-> 丢给 iq -> 装车出发 oq ->到达城市等待分发 Wq->deliverInputEvent 分发-> InputResponse 快递员送货;

知识点 2:InputReader ,InputDispatcher都是系统线程;

其中InputReader 快递员,InputDispatcher 快递站 都是快递公司的system_server 系统服务的线程;


还是那句话,书上的来总觉浅,便知此事要躬行!

暂时无法在飞书文档外展示此内容

  1. 问题 wakeup from tid:12980 是被12980 唤醒的,12980 是什么?

原来是 ui线程,ui线程是被什么唤醒的呢,

居然是 0? 我没有找到。。。就姑且当做他就是系统的第一个进程吧;

还好我不服气;又找了下,感觉这个靠谱些;

  1. 看看 运行的时候,

  1. 然后 inputDispatche 调度器 被唤醒了,被谁呢? 2177;也就是上面的所在的线程;

今天就到这里吧,啃累了;