今天要解决的一个疑问是:
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
后面完善 。