Android70ActivityManagerService启动Activity的过程一.doc

Android70ActivityManagerService启动Activity的过程一.doc

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android 7.0 ActivityManagerService(2) 启动Activity的过程:一 一、基础知识 在分析Activity的启动过程前,有必要先了解一下Activity相关的基础知识。 1、Task和Activity的设计理念 关于Android中Task和Activity的介绍,个人觉得《深入理解Android》中的例子不错。 我们就借鉴其中的例子,进行相应的说明: 上图列出了用户在Android系统上想干的三件事,分别用A、B、C表示。 在Android中,每一件事可以被看作是一个Task;一个Task可以被细分成多个子步骤,每个子步骤可以被看作是一个Activity。 从上图可以看出,A、B两个Task使用了不同的Activity来完成相应的任务,即A、B两个Task的Activity之间没有复用。 但是在Task C中,分别使用了Task A中的A1、Task B中的B2。 这么设计的原因是:用户想做的事情(Task)即使完全不同,但是当细分Task为Activity时,就可能出现Activity功能类似的情况。 当Task A和Task B中已经有能满足需求的Activity时,Task C就会优先复用而不是重新创建Activity。 通过重用Activity可以节省一定的开销,同时为用户提供一致的界面和用户体验。 对Android的设计理念有一定的了解后,我们看看Android是如何组织Task及它所包含的Activity。 上图为一个比较经典的示例:图中的Task包含4个Activity。用户可以单击按钮跳转到下一个Activity。同时,通过返回键可以回到上一个Activity。 图中虚线下方为Activity的组织方式。从图中可以看出,Android是以Stack的方式来管理Activity的。 先启动的Activity成为栈底成员,被启动的Activity将作为栈顶成员显示在界面上。 当按返回键时,栈顶成员出栈,前一个Activity成为栈顶显示在界面上。 以上是一个Task的情况。当有多个Task时,Android系统只支持一个处于前台的Task,其余的Task均处于后台。 这些后台Task内部Activity保持顺序不变。用户可以一次将整个Task挪到后台或置为前台,如下图所示: 在AMS中,将用ActivityRecord来作为Activity的记录者、TaskRecord作为Task的记录者,TaskRecord中有对应的ActivityStack专门管理ActivityRecord。 2、启动模式 Android定义了4种Activity的启动模式,分别为Standard、SingleTop、SingleTask和SingleInstance。 Standard模式 我们平时直接创建的Activity都是这种模式。 这种模式的Activity的特点是:只要你创建并启动了Activity实例,Android就会向当前的任务栈中加入新创建的实例。退出该Activity时,Android就会在任务栈中销毁该实例。 因此,一个Task中可以有多个相同类型的Activity(类型相同,但不是同一个对象)。 Standard模式启动Activity的栈结构如下图所示: SingleTop模式 这种模式会考虑当前要激活的Activity实例在任务栈中是否正处于栈顶。 如果处于栈顶则无需重新创建新的实例,将重用已存在的实例, 否则会在任务栈中创建新的实例。 SingleTop模式启动Activity的栈结构如下图所示: 注意:当用SingleTop模式启动位于栈顶的Activity时,并不会创建新的Activity,但栈顶Activity的onNewIntent函数将被调用。 SingleTask模式 在该种模式下,只要Activity在一个栈中存在,那么多次启动此Activity都不会重新创建实例。和SingleTop一样,系统也会回调其onNewIntent。 具体一点,当一个具有singleTask模式的Activity A请求启动后,系统先会寻找是否存在A想要的任务栈。 如果不存在对应任务栈,就重新创建一个任务栈,然后创建A的实例后,把A放到任务栈中。 如果存在A所需的任务栈,那么系统将判断该任务栈中是否有实例A。 如果有实例A,那么系统就将A调到栈顶并调用其onNewIntent方法(会清空A之上的Activity)。 如果没有实例A,那么系统就创建实例A并压入栈中。 SingleTask模式启动Activity的栈结构如下图所示: SingleInstance模式

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档