全面解析Activity-的4种启动模式.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
. . . . . 全面解析Activity 的4种启动模式 说到Android 的启动模式,首先来看一个实际的业务场景。我之前在公司实习的时候, 我所在的部门只负责一个品类 〔国际机票〕,那用户从机票首页开始搜索机票到最终完成订 单并支付大致分为以下几个流程〔实际流程因为考虑的问题比拟多,所以要比这稍微复杂 些〕: 1. 用户在机票首页确认好出发、到达目的地、日期与人数后,就可以点击“搜索〞进 入到搜索结果页 2. 用户根据意愿选择相应航班并点击进入确认订单页 3. 用户确认好订单容点击下单,开始支付,支付完成跳支付完成页 4. 用户可以选择回到首页,或者去公共订单系统查看订单详情〔这属于公共局部,不 在我们讨论的围了〕 经过上面4个步骤整个购票流程就算完毕了。但是,这里有个问题,就是用户从首页到 最后的支付完成页之间经历了这么多的Activity,那用户完成了支付后想回到首页是不是 要一层一层的往回退才行?如果是这样的话,那就太不人性化了,那怎样才能在完成支付后 一键回到首页呢?有人可能会说,那就直接从支付完成页跳转到首页不就可以了吗?这样当 然是可以的,但是这样做那之前打开的那么多Activity怎么办呢?难道就让它们待在 Activity任务栈中吗?这样岂不是太浪费存了!请看我画的示意图: 如上图所示,如果我们在支付完成之后启动首页Activity那页面1-页面5之间的所 有Activity对用户来说都是无用的,并且占用的存,极浪费这本来可能就很紧的Android 存资源。那有没有一些优雅的方式来解决这个问题呢? 我们可以想象一下,有没有可能在 从页面4跳转首页的时候把原来处于首页之上的所有Activity全部干掉呢?这样不就刚好 解决了我们刚刚所说浪费资源的问题了吗?就像下列图一样: 1 / 9 . . . . . 很显然,无论从用户体验的角度还是从存优化的角度来看第二种方式都是最为优雅的。 那怎么实现这种需求呢?有人可能会说,可以将任务栈中页面 1 之上的所有 Activity 一层一层地执行 finish()方法销毁掉,这样就可以回退到页面 1。这样确实是可行的,但是 有个问题:如果希望从页面 4 跳转到页面 1 时传递一些数据回去,比如说订单号、支付完成 等信息,还需要在 finish()执行前执行 setResult(int resultCode, Intent intent)将要 往回传递的数据放在 Intent 里面。 这样做其实是有风险的,因为Android 系统并不保证 Activity 任务栈中那些不可见的 Activity 的状态是一直被保存着的,如果出现系统存不足的情况,Android 系统是可以回收 那些处于不可见状态的 Activity 的。也就是说,一旦中间有一 Activity 被销毁了,那这个 传递链就失去成效了。 那应该怎么办呢?别着急,Google 的Android 工程师早就已经为我们想到这种需求了。 那应该怎么做呢?其实就是通过设置Activity 的启动模式来实现。好,问题抛出了,下面 让我们一步一步来看。 Activity 有哪几种启动模式? Activity 一共有 4 种启动模式,分别是: Ⅰ.standard Ⅱ. singleTop Ⅲ.singleTask Ⅳ.singleInstance 下面我来分别做介绍。 2 / 9 . . . . . 一、standard 顾名思义,standard 英文意思就是“标准的〞。 也就是说这种启动模式是默认的,我们平时在开发中使用最多的就是 Standard 模式的。 如果一个 Activity 的启动模式被设置成standard,那么它可以无限制的创建。你每一 次通过 Intent 去启动这种模式的Activity 都会重新创建一个。 大家可以想象一下里的收件箱〔假设我们将打开的Activity 的启动模式设置为 Standard,当然这也是默认的模式〕里有 10封。我们给查看的 Activity 起名为 CheckEm

文档评论(0)

精品文档 + 关注
实名认证
文档贡献者

从事一线教育多年 具有丰富的教学经验

1亿VIP精品文档

相关文档