先上类图:
基本类说明和运行框架
图中蓝色表示AMS进程,黄色表示app进程。
1. 全局调度者
在android中,AMS是activity和进程的全局调度者,也就是说系统中载入和准备载入的activity在AMS中
都有记录-ActivityRecord实例。AMS里有多个任务栈-ActivityStack(通过ActivityStackSupervior管理),用来分组管理这些ActivityRecord。AMS的调度机制和任务管理较为复杂,需要进一步单独分析。
2. 本地管理者
Activity运行在所属app进程中, 每个进程的主线程是ActivityThread,ActivityThread是对Activity调度的执行者。在这个类中,有一个activity的本地记录mActivities,记录的是进程中所有的activity信息。
3. 消息传递者
ActivityThread执行来自于AMS的命令,而中间传递命令的是ApplicationThread。 ApplicationThread是一个Binder实体类,同时实现了接口IApplicationThread。 此类通过IPC通信,接收来自AMS的消息,然后打包发送给ActivityThread里的mH handler处理, mH handler再通过performXXXAcitivity()函数调用Activity类中的perfromXXX()函数来执行生命周期函数。
ApplicationThreadProxy是ActivityThread的代理类,用来被AMS调用,与ApplicationThread进行IPC通信。
AMS的proxy类是ActivityManagerProxy,用于App或者其他service端调用来使用AMS的功能,如startActivity,startService等。