01 ActivityThread 的 handleLaunchActivity是如何被调用的

今天要解决的一个疑问是:
ActivityThread 定义有方法 handleLaunchActivity , 它是在哪里被调用的?
看其内部实现,有创建一个Activity对象,还有调用这个Activity对象的 onCreate 方法, 我们可以肯定的是这个方法一定是在 startActivity 的时候被调用 , 所以我们就从 ActivityManagerService 中 startActivity 开始追踪,最终发现有如下流程:

com.android.server.wm.ActivityStackSupervisor#realStartActivityLocked
调用 clientTransaction.addCallback(LaunchActivityItem.obtain);

com.android.server.wm.ActivityStackSupervisor#realStartActivityLocked 调用
com.android.server.wm.ClientLifecycleManager#scheduleTransaction 调用

android.app.servertransaction.ClientTransaction#schedule 然后内部实现是 :调用 IApplicationThread的 scheduleTransaction 方法。也就是
ActivityThread 的内部类 android.app.ActivityThread.ApplicationThread#scheduleTransaction 方法 。

callback 的执行是在 ActivityThread 收到 EXECUTE_TRANSACTION 这个信息之后 调用 TransactionExecutor#execute 来执行的 。

而 LaunchActivityItem 的 execute 方法调用了 ActivityThread 的 handleLaunchActivity 方法。

com.android.server.am.ActivityManagerService#attachApplicationLocked方法 里面 判断是是否是要启动activity 还是要启动service 或者启动 broadcast .
判断的依据是什么呢?

需要重点看 com.android.server.wm.ActivityStarter#startActivityInner 方法.
以及
com.android.server.wm.RootWindowContainer#attachApplication

后面完善 。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值