android9启动流程,Activity启动流程(基于android9.0)

流程图

550424cdf891

android 热启动Activity简单流程.png

源码分析

应用服务层>>>>>

Activity.java

550424cdf891

activity.png

550424cdf891

activity2.png

通过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的生命节点。

第一步:

550424cdf891

第一步.png

LaunchActivityItem.execute()调用ActivityThread实现的handleLaunchActivity()->performLaunchActivity(),反射创建Activity实例,并attach(),创建window和DecorView,此时主窗口已经创建成功。然后调用callActivityOnCreate()即Activity中的onCreate(),使用setContentView()解析layout.xml布局到DecorView根视图,形成完整的视图树(具体渲染过程查看Activity之View渲染流程)。

第二步:

TransactionExcutor执行executeLifecycleState,然后调用handleStartActivity()..即到Activity中的onStart()。

第三步

550424cdf891

第三步.png

TransactionExcutor执行cycleToPath,调用handleResumeActivity,先执行Activity的onResume(),将DecorView添加到window中,这个过程会对第一步中的视图树再次遍历测量布局绘制,此时页面最终展示出来。(此处链接到 Activity之View渲染流程)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值