Activity组件研究

Activity组件研究

Activity启动过程

  1. 相关简介
    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
  2. 流程
    从一个activity启动另一个activity流程( 给定intent启动activity时,会在AMS中根据intent去PackageManageService中查询Activity信息):
Created with Raphaël 2.1.0 Activity Activity Instrumentation Instrumentation ActivityManagerNative ActivityManagerNative ActivityManagerService ActivityManagerService ActivityStackSupervisor ActivityStackSupervisor ActivityStack ActivityStack execStartActivity startActivity startActivity startActivityMayWait startActivityLocked startActivityUncheckedLocked startActivityLocked resumeTopActivitiesLocked resumeTopActivityLocked resumeTopActivityInnerLocked startPausingLocked

activity pause流程:

Created with Raphaël 2.1.0 ActivityStack ActivityStack ApplicationThread ApplicationThread ActivityThread ActivityThread ActivityManagerService ActivityManagerService ActivityStackSupervisor ActivityStackSupervisor schedulePauseActivity handlePauseActivity performPauseActivity activityPaused activityPausedLocked completePauseLocked finishCurrentActivityLocked resumeTopActivitiesLocked resumeTopActivityLocked resumeTopActivityInnerLocked startSpecificActivityLocked startProcessLocked

activity start流程:

Created with Raphaël 2.1.0 ActivityManagerService ActivityManagerService Process Process ActivityThread ActivityThread ContextImpl ContextImpl ActivityStackSupervisor ActivityStackSupervisor ApplicationThread ApplicationThread Instrumentation Instrumentation Activity Activity start main attach createAppContext attachApplication attachApplicationLocked realStartActivityLocked scheduleLaunchActivity handleLaunchActivity performLaunchActivity newActivity createBaseContextForActivity attach callActivityOnCreate

Activity管理

  1. 相关简介
    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作为被选中的对象。
  2. 流程
    创建HOME_STACK_ID ActivityContainer
Created with Raphaël 2.1.0 SystemServer SystemServer ActivityManagerService ActivityManagerService ActivityStackSupervisor ActivityStackSupervisor ActivityContainer ActivityContainer main setWindowManager setWindowManager newActivityDisplay createStackOnDisplay(HOME_STACK_ID) createActivityContainer attachToDisplayLocked

开机启动Home

Created with Raphaël 2.1.0 SystemServer SystemServer ActivityManagerService ActivityManagerService ActivityStackSupervisor ActivityStackSupervisor main systemReady resumeTopActivitiesLocked
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值