面试:你对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 系统服务的线程;
还是那句话,书上的来总觉浅,便知此事要躬行!
暂时无法在飞书文档外展示此内容
- 问题 wakeup from tid:12980 是被12980 唤醒的,12980 是什么?
原来是 ui线程,ui线程是被什么唤醒的呢,
居然是 0? 我没有找到。。。就姑且当做他就是系统的第一个进程吧;
还好我不服气;又找了下,感觉这个靠谱些;
- 看看 运行的时候,
- 然后 inputDispatche 调度器 被唤醒了,被谁呢? 2177;也就是上面的所在的线程;
今天就到这里吧,啃累了;