一、启动过程
1、Launcher通过Binder进程间通信机制通知ActivityManagerService,它要启动一个Activity;
2、ActivityManagerService通过Binder进程间通信机制通知Launcher进入Paused状态;
3、Launcher通过Binder进程间通信机制通知ActivityManagerService,它已经准备就绪进入Paused状态,于是ActivityManagerService就创建一个新的进程,用来启动一个ActivityThread实例,而Application即在ActivityThread.main()中被回调了其初始化的代码即将要启动的Activity就是在这个ActivityThread实例中运行;
4、ActivityThread通过Binder进程间通信机制将一个ApplicationThread类型的Binder对象传递给ActivityManagerService,以便以后ActivityManagerService能够通过这个Binder对象和它进行通信;
5、ActivityManagerService通过Binder进程间通信机制通知ActivityThread,现在一切准备就绪,它可以真正执行Activity的启动操作了。
二、示例:启动淘宝
1、Launcher通知AMS启动淘宝APP的MainActivity,也就是清单文件设置启动的Activity。
2、AMS记录要启动的Activity信息,并且通知Launcher进入pause状态。
3、Launcher进入pause状态后,通知AMS已经paused了,可以启动淘宝了。
4、淘宝app未开启过,所以AMS启动新的进程,并且在新进程中创建ActivityThread对象,执行其中的main函数方法。
5、淘宝app主线程启动完毕后通知AMS,并传入applicationThread以便通讯。
6、AMS通知淘宝绑定Application并启动MainActivity。
7、淘宝启动MainActivitiy,并且创建和关联Context,最后调用onCreate方法。
网友评论