石家庄网站建站推广,c2c模式发展趋势,营销客户管理系统,网站开发课程软件背景
偶然发现一个点#xff0c;就是在onCreate执行Handler.post在onResume后才执行#xff0c;以下是测试代码 多次运行的结果一致#xff0c;为什么execute runnable不是在onCreate和onResume之间执行的呢#xff0c;带着疑问撸了一遍Activity启动流程
关键源码分析 …背景
偶然发现一个点就是在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的消息