ActivityManagerService中常见的类及其作用,包括ActivityRecord,ProcessRecord,TaskRecord,ActivityStack,ActivityStackSupervisor。
ActivityRecord
Activity History Stack中的一个节点,代表了一个Activity实例在System_Server进程端的驻留对象。startActivity
时,在ASS#startActivityLocked
方法中通过new ActivityRecord()
创建实例对象。
ProcessRecord
应用程序进程对象,表示一个应用程序,对应用程序的所有管理操作都依赖于它,通过ActivityManagerService#startProcessLocked()
创建出来,Process.start()
实际上是调用ZygoteServer
来fork出一个新进程。
|
|
管理ActivityRecord
- add:
ASS#realStartActivityLocked()
方法中,通过app.activities.add(r);
将新的ActivityRecord添加到运行的activities列表中。 - remove:
ASK#destroyActivityLocked()
方法中,通过r.app.activities.remove(r);
将ActivityRecord从activities列表中移除。
TaskRecord
通常一个应用程序会包含至少一个TaskRecord对象,用于管理ActivityRecord,如果有Activity在定义时指定了android:taskAffinity,则在启动该Activity时,会创建一个新的TaskRecord。每次退出LaunchActivity之后,再次进入,会重新创建。
|
|
TaskRecord创建过程
|
|
从Launcher中点击图标启动一个Activity,在ASS#startActivityUncheckedLocked
中通过createTaskRecord()
中调用new TaskRecord()
创建TaskRecord实例。其它二级页面Activity和LaunchActivity共用同一个TaskRecord。
管理ActivityRecord
- add:
ASK#startActivityLocked()->TaskRecord#addActivityToTop(r)->TaskRecord#addActivityAtIndex()
将ActivityRecord实例添加到mActivities中。 - remove:
ASK#activityDestoryedLocked()->ASK#removeActivityFromHistoryLocked()->TaskRecord#removeActivity()
从mActivities中移除ActivityRecord。
ActivityStack
State and management of a single stack of activities,Activity栈列表,一个应用程序对应一个该对象实例,每次退出LaunchActivity之后,再次进入,会重新创建。
ActivityStack创建过程:startActivityUncheckedLocked()->computeStackFocus()->createStackOnDisplay()->new ActivityStack()
。
|
|
管理TaskRecord
- add:
ASS#startActivityUncheckedLocked()->ASK#createTaskRecord()->ASK#addTask()->ASK#insertTaskAtTop(task)
添加TaskRecord。
ASS/AMS: 整个Android系统中只有一个实例对象。