Activity组件研究
Activity启动过程
- 相关简介
Activity: Activity的父类
Instrumentation: 用于监控应用程序和系统之间的交互操作
ActivityThread: 管理应用进程的主线程的执行,并根据AMS的要求(ApplicationThread为server,AMS为Client)负责调度和执行activities、broadcasts和其他操作。包括快速处理UI事件,快速处理Broadcast消息。
ProcessRecord: 在AMS中用来描述一个Activity组件所运行的应用程序进程
ActivityStack: 在AMS中管理多个Activity
ActivityRecord: ActivityStack管理的对象
ActivityRecordClient: ActivityRecord在Activity类中的客户端
ActivityStackSupervisor: ActivityStack的超级管理员,负责管理ActivityStack。应该是为分屏显示功能添加的。
ActivityManagerNative: AMS的binder端
ApplicationThread: 与AMS的ApplicationThreadProxy binder相关联,存放在LRU process列表里,AMS可以通过ApplicationThreadProxy反调用ActivityThread - 流程
从一个activity启动另一个activity流程( 给定intent启动activity时,会在AMS中根据intent去PackageManageService中查询Activity信息):
activity pause流程:
activity start流程:
Activity管理
- 相关简介
TaskRecord: Task是指将相关的Activity组合到一起,以Activity Stack的方式进行管理。从用户体验上讲,一个“应用程序”就是一个Task,但是从根本上讲,一个Task是可以有一个或多个Android Application组成的。例如:你想在发送短信时,拍一张照并作为彩信发出去,这时你首先停留在短信应用程序的的Acitivity上,然后跳转到 Camera应用程序的Activity上,当完成拍照功能后,再返回到短信应用程序的Activity。这实际上是两个Android Application协同合作后完成的工作,但为了更好的用户体验,Android平台加入了Task这么一种机制,让用户没有感觉到应用的中断,让用 户感觉在一“应用程序”里就完成了想完成的工作。
ActivityStack: Activity承担了大量的显示和交互工作,从某种角度上将,我们看见的应用程序就是许多个Activity的组合。为了让这许多 Activity协同工作而不至于产生混乱,Android平台设计了一种堆栈机制用于管理Activity,其遵循先进后出的原则,系统总是显示位于栈 顶的Activity,从逻辑上将,位于栈顶的Activity也就是最后打开的Activity,这也是符合逻辑的。
在操作应用程序时,每次启动新的Activity,都会将此压入Activity Stack,当用户执行返回操作时,移除Activity Stack顶上的Activity,这样就实现了返回上一个Activty的功能。直到用户一直返回到Home Screen,这时候可以理解为移除了Activity Stack所有的Activity,这个Activity Stack不再存在,应用程序也结束了运行。
ActivityDisplay: 对于目前存在的每一个可用的display设备,都有一个ActivityDisplay设备与之对应。
ActivityContainer: 管理activity stack,与ActivityDisplay为1对多关系,即一个display对应多个container,每个container以stackid标记。HOME_STACK_ID ActivityContainer中包含mHomeStack栈。
ActivityStackSupervisor: 负责管理上述数据结构,其中有两个ActivityStack,通过adjustStackFocus函数选择新建立的ActivityRecord加入哪一个Stack。一个叫mHomeStack,主要用于管理Launcher还有SystemUI Rectent Tasks的activity,另一个叫mFocusedStack,用于管理其他app的activity。如果当前没有其他app在运行,那么就只有mHomeStack,当其他app启动时会动态创建一个新的stack,新的stack作为被选中的对象。 - 流程
创建HOME_STACK_ID ActivityContainer
开机启动Home