普通Activity创建也就是平常我们在代码中采用startActivity(Intent intent)方法来创建Activity的方式。总体流程如下图:
启动过程设计到两个进程:本地进程和系统服务进程。本地进程也就是我们的应用所在进程,系统服务进程为所有应用共用的服务进程。整体思路
-
startActivity(Intent intent)
activity向Instrumentation请求创建 -
Instrumentation
通过AMS在本地进程的IBinder接口,访问AMS,这里采用的跨进程技术是AIDL -
然后AMS进程一系列的工作,如判断该activity是否存在,启动模式是什么,有没有进行注册等
-
通过
ClientLifeCycleManager
,利用本地进程在系统服务进程的IBinder接口直接访问本地ActivityThread。 -
ApplicationThread是ActivityThread
的内部类,IApplicationThread是在远程服务端的Binder接口 -
ApplicationThread
接收到服务端的事务后,把事务直接转交给ActivityThread处理 -
ActivityThread通过
Instrumentation
利用类加载器进行创建实例,同时利用Instrumentation回调activity的生命中周期