Activity启动流程

ApplicationThread.scheduleLaunchActivity ——> 通过handler发送消息,回调到ActivityThread—→handleLaunchActivity——>ActivityThread.performLaunchActivity——>Activity.attach创建window/调用onCreate方法。

调用startActivity,先通过Instrumentation来确定具体打开哪个Activity,然后调用AMS代理的startActivity进行跨进程调用,然后AMS进行一些处理比如入栈操作…最后调用ApplicationThread的代理来跨进程执行ApplicationThread的scheduleLaunchActivity,然后就走上面的方法流程,最后调用到onCreate。然后在执行handleResume时,创建DecorView,调用WindowManagerGlobal的addView方法,创建了ViewRootImpl,调用了ViewRootImpl的setView传入DecorView,在里面进行和WMS的通信,进行View的绘制。

在这里插入图片描述

APP ActivityManager Instrumentation ActivityTaskManagerService ActivityStarter ApplicationThread H (ActivityThread Handler) startActivity() getInstrumentation() execStartActivity() startActivity (Binder call) processIntent() startActivityInner() scheduleTransaction (Binder call) sendMessage() performLifecycleSequence() handleLaunchActivity() performLaunchActivity() onCreate() APP ActivityManager Instrumentation ActivityTaskManagerService ActivityStarter ApplicationThread H (ActivityThread Handler)

重要角色

  • ActivityManagerServiceActivity的启动及生命周期统一由ActivityManagerService管理,而ActivityManagerService处于SystemServer进程中,应用程序进程通过Binder机制与SystemServer进程进行通信。
  • ActivityManagerProxy:是ActivityManagerService在客户端的代理,客户端通过ActivityManageProxy间接调用ActivityManagerService。
  • ActivityThread:应用程序的主线程ActivityThread,也是应用程序的入口;消息循环机制的创建、初始化信息等都在ActivityThread中完成。
  • ApplicationThread:用来实现ActivityManagerServiceActivityThread之间的交互。在ActivityManagerService需要管理相关Application中的Activity的生命周期时,通过ApplicationThread的代理对象与ActivityThread通讯
  • ApplicationThreadProxy:是ApplicationThread在服务器端的代理,负责和客户端的ApplicationThread通讯。AMS就是通过该代理与ActivityThread进行通信的。
  • Instrumentation:每一个应用程序只有一个Instrumentation对象,每个Activity内都有一个对该对象的引用。Instrumentation可以理解为应用进程的管家ActivityThread要创建或暂停某个Activity时,都需要通过Instrumentation来进行具体的操作
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xoliu1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值