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