基于api28分析
1.Launcher在SystemServer中获取AMS,请求AMS启动app页面
2.AMS请求Zygote创建app进程
3.调用ActivityThread.main方法,方法主要执行内容如下:
a.初始化主线程Looper(Looper.prepareMainLooper)
b.实例化ActivityThread对象
c.赋值mainThreadHandle(主线程Handle)
d.开启主线程Loop循环(Looper.loop)
e.调用ActivityThread.attach方法
4.ActivityTherad.attach方法里获取AMS,并调用其attachApplication方法
5.AMS.attachApplication里又会调用ApplicationThread.bindApplication
(ApplicationThread是ActivityThread的内部类,并且是一个Binder,ActivityThread对象中持有 ApplicationThread的实例对象,用于ActivityThread与AMS跨进程通讯)
6.ApplicationThread.bindApplication实际是使用ActivityThread.H向ActivityThread发送消 息,ActivityThread收到消息后执行自身的handleBindApplication方法
7.ActivityThread.handleBindApplication主要执行内容如下:
a.实例化Instrumentation
b.创建App的Application(AppBindData.LoadedApk.makeApplication)
c.使用Instrumentation.callApplicationOnCreate方法来调用Application.onCreate
至此APP的进程启动与Application创建已完成.
8.回到第5点,AMS调用ApplicationThread.bindApplication后,接着使用Act堆栈管理类 (ActivityStackSupervisor)中的attachApplicationLocked方法,内部调用了 realStartActivityLocked,而realStartActivityLocked中同样是使用了ApplicationThread,执行它 的scheduleLaunchActivity方法,scheduleLaunchActivity方法里也是通过ActivityThread.H向 ActivityThread发送消息,收到消息后执行ActivityThread的handleLaunchActivity方法来启动 app的act.
(在API>=28后,在realStartActivityLocked中不再是直接使用ApplicationThread来回到 ActivityThread的handleLaunchActivity方法来启动app的act)
9.在API>=28后,ActivityStackSupervisor.realStartActivityLocked流程如下:
a.实例化ClientTransaction对象,它拥有ApplicationThread和一个ActivityLifecycleItem(定义act 最终需要执行到的生命周期)
b.获取AMS的ClientLifecycleManager对象,执行 ClientLifecycleManager.scheduleTransaction,参数为ClientTransaction
c.ClientLifecycleManager.scheduleTransaction中直接调用 ClientTransaction.schedule,schedule中同样使用ApplicationThread,调用其 scheduleTransaction方法
d.ApplicationThread.scheduleTransaction方法里使用 ActivityThread.this.scheduleTransaction(), 但ActivityThread类中没有方法,因为这个 API>=28,ActivityThread是继承了ClientTransactionHandler,scheduleTransaction()是在 ClientTransactionHandler里
e.ClientTransactionHandler.scheduleTransaction()也是通过ActivityThread.H发送消息回到 ActivityThread中,并调用ActivityThread中的TransactionExecutor.execute(),里面执行两个方法 分别为executeCallbacks和executeLifecycleState
f.executeCallbacks中主要获取ClientTransaction中的callback集合,并执行callback的execute方 法,而ClientTransaction中的callback在ActivityStackSupervisor.realStartActivityLocked中设置 了,其对象为LaunchActivityItem,即这里就是执行LaunchActivityItem.execute,而里面是直接是使用ActivityThread.handleLaunchActivity实例化act,执行act的OnCreate生命周期,在ActivityClientRecord中设置其对于的生命周期状态值(ON_CREATE),并将ActivityClientRecord对象put到mActivities中
g.executeLifecycleState方法执行内容
-1.从ClientTransaction获取ActivityLifecycleItem,这个对象表示act最终需要执行到哪个生命 周期状态,而这个ActivityLifecycleItem同样是在ActivityStackSupervisor 的 realStartActivityLocked中设置的,其对象为ResumeActivityItem,表示最终需要执行到 ON_RESUME
-2.从mActivities获回最新状态的ActivityClientRecord,并仍到cycleToPath中计算出大于当前 状态值并小于目标状态值的生命周期状态值数组(ON_CREATE<array[]<ON_RESUME), 将数组传到performLifecycleSequence中for取出每一个生命周期状态参数,根据状态值会 回到ActivityThread中所对应处理act生命周期方法,如handleStartActivity....
-3.执行ActivityLifecycleItem(ResumeActivityItem)的execute方法,最终执行 ActivityThread.handleResumeActivity
具体流程图