背景
偶然发现一个点,就是在onCreate执行Handler.post在onResume后才执行,以下是测试代码

多次运行的结果一致,为什么execute runnable不是在onCreate和onResume之间执行的呢,带着疑问撸了一遍Activity启动流程

关键源码分析
-
通过分析Activity启动原理得知,onCreate执行前会发送一个EXECUTE_TRANSACTION的post消息

-
ActivityThread的Handler会执行该post消息

-
ClientTransaction是在ActivityStackSupervisor的realStartActivityLocked中创建的

由上面代码可知,ClientTransaction在Callback处添加了LaunchActivityItem(内部会执行Activity.onCreate),在LifecycleStateRequest处ResumeActivityItem(内部会执行Activity.onResume) -
在TransactionExecutor的execute方法内会依次执行callback和LifecycleStateRequest

综上分析得知,这里onCreate和onResume是在同一个消息(EXECUTE_TRANSACTION)内执行的,依照消息队列的特性,执行完该消息后才会去执行刚刚onCreate中post的消息


![[高阶数据结构七]跳表的深度剖析](https://i-blog.csdnimg.cn/direct/08dfa5747b4e4518835809d592ba6914.png)















