Android开发中任务和返回栈(tasks and back stack)

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 12:39 我要评论(0)

tasks and back stack

一个Task 就是一组activity的集合。这些activity按照它们打开的顺序被放置于一个先进后出的栈中(back stack)。

用户点击图标打开一个app时,该app的task会被移到前台显示。如果当前没有该app的task,系统将会新建一个task并在其中运行Main activity。

一个activity(A)打开另一个activity(B),B将会被置于栈顶并显示,A仍然处于栈中,系统会保存它的状态。 如果按下返回键,当前的activity将被弹出栈并destroy掉,前一个activity被resume并重新显示(还原stop前的UI显示)。

下图表示2个activity切换过程该栈的状态。

用户可以通过返回键令task返回栈中的activity依次弹出,当最后一个activity也被弹出后,该task便不再存在。

如果HOME键被按下,从当前app回到桌面,该app的Task会被移到后台,后台的task所属的所有activity都是stop状态,且back stack依然存在这个task其实只是失去了和用户交互的焦点。

多个task可以同时存在后台,但是系统也会停止一些activity来释放空间,导致activity的状态丢失。

Back stack中的activity不会被重新排位,如果同一个activity能被其他多个activity 启动,这个activity都会创建新实例推入栈中:

总结Activity和task的默认行为:

Activity A 启动了 Activity B , A 会被 stop ,但状态仍然保存( UI ,如活动条的位置, EditText 输入的文字),从 B 返回, A 被 resumed 并恢复之前的状态。

点击 HOME 返回桌面,当前的 task 被移到后台,系统会保存 task 中每一个 activity 的状态;直到用户点击 app 图标 返回,该 task 被移回前台, resume 栈顶的 activity 。

返回键会导致当前的 activity 从栈顶弹出并被 destroy ,该 activity 状态不会再被保存,前一个 activity 移到栈顶。

Activity 能被实例化多次,包括其它 task 启动它。

管理Task

Android管理task和back stack的默认行为:activity 在同一个任务中创建并置于先进后出的栈中。如果这种默认的行为不能满足我们的app设计,如:为一个activity创建一个新任务(而不是在相同的任务 中),或者启动activity时直接打开已存在的实例(而不是直接在栈顶创建新实例),又或者在用户离开这个task的时候清空除了栈顶以外的全部 activity。Android提供了一些属性和flag让coder来指定管理的方式。

在manifest <activity>标签中的相关属性:

launchMode

allowTaskReparenting

clearTaskOnLaunch

alwaysRetainTaskState

finishOnTaskLaunch

Intent 也有相关的flag:

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_SINGLE_TOP

android建议一般的app都不 要干涉系统按照默认的方式管理activity和task。如果coder必须指定非默认的管 理的方式,最好确定这种效果能符合用户的预期。

定义Launch Mode

对<activity> 的launchMode可以指定以下值:

Use Cases

Launch Mode

Multiple Instances?

Comments

Normal launches for most activities

"standard"

Yes

默认 行为。每次启动一个activity,系统都会在目标task新建一个实例。

Normal launches for most activities

"singleTop"

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...