流程图
源码分析
应用服务层>>>>>
Activity.java
通过Instrumentation仪表盘请求AMS系统服务。
系统服务层>>>>>
AMS调用activity启动类ActivityStarter,并通过多次startActivity()装载参数后,调用任务栈管理类ActivityStackSupervisor,组装ClientTransaction对象,此时做的目的是安排activity的生命周期,addCallback-LaunchActivityItem,设置LifecycleItem-ResumeActivityItem,最后通过AMS调用生命周期管理器ClientLifecycleManager执行ClientTransaction.execute(),请求应用层服务。
应用服务层>>>>>
应用服务进程ActivityThread中ApplicationThread接收到AMS发出的schedule请求,调用scheduleTransaction发送消息让TransactionExecutor执行activity的生命周期。其中值得注意的是执行者也就是(TransactionExecutor)中定义了getLifecyclePath(start,finish,excludeLastState),获取从start到finish但不包括excludeLastState的生命节点。
第一步:
LaunchActivityItem.execute()调用ActivityThread实现的handleLaunchActivity()->performLaunchActivity(),反射创建Activity实例,并attach(),创建window和DecorView,此时主窗口已经创建成功。然后调用callActivityOnCreate()即Activity中的onCreate(),使用setContentView()解析layout.xml布局到DecorView根视图,形成完整的视图树(具体渲染过程查看Activity之View渲染流程)。
第二步:
TransactionExcutor执行executeLifecycleState,然后调用handleStartActivity()..即到Activity中的onStart()。
第三步
TransactionExcutor执行cycleToPath,调用handleResumeActivity,先执行Activity的onResume(),将DecorView添加到window中,这个过程会对第一步中的视图树再次遍历测量布局绘制,此时页面最终展示出来。(此处链接到 Activity之View渲染流程)