安卓四大组件 之 Activity 之 任务栈和回收栈(Tasks and Back Stack)

所有activity都属于任务栈;任务栈中包含着一系列activity,这些activity在任务栈中的排列顺序取决于用户打开它们的先后顺序——最先打开的位于栈底,后打开的依次向上罗列;任务栈可以移到后台并为其中的每一个activity保持其停止时的状态,目的是为了让用户在操作其他任务栈的同时不丢失他们曾经操作过的activity。
摘要由CSDN通过智能技术生成

本文摘要

|---Saving Activity State  

|---Managing Tasks

    |---Defining launch modes

    |---Handling affinities

    |---Clearing the back stack

|---Starting a task


应用程序(也就是我们日常接触到的“App”)中往往包含着很多activity。每个activity都应该围绕着某种具体功能来设计,用户不仅可以使用该功能,而且可以通过这个activity去开启其他activity。比如,邮件App中有一个activity是专门用来展示未读邮件列表的,当用户选中其中一封邮件时,一个新的activity就会被开启用以阅读这封邮件。

一个应用程序中的activity可以开启另一个应用程序中的activity。当然了,前提是这两个应用程序同在一台设备上。举个例子,如果我们的应用程序需要发送一封邮件,那么我们可以定义一个intent来调用其它应用程序中的activity帮我们实现发送的功能。另外,如果有需要,还可以用这个intent携带一些数据,如收件人地址和要发送的消息内容等。这条intent发出后,另一个应用程序中声明自己可以处理此类intent的activity就会被开启。在我们这个例子中,我们定义的这条intent想要做的是发送一封邮件,所以邮箱App中负责撰写邮件的activity开启了(如果同一设备上存在多个activity支持同一类型的intent,那么系统会提示用户从中选择一个)。当邮件发送完毕,邮箱App中负责撰写邮件的activity就会关闭,然后我们的activity会重新展现在屏幕上。尽管负责发送邮件的activity来自另一个应用程序,但给人的感觉好像它就是我们的应用程序的一部分。这两个并不存在于相同应用程序中的activity之所以能够流畅的调用,就是因为在安卓将它们放置在同一个任务栈中。

任务栈就是用户在完成某一事情时要与之交互的一系列activity的集合。这些activity被有序地放置在回收栈中,排列的顺序就是其被打开的先后顺序——先打开者置于栈底,后打开者依次向上罗列。不理解?没关系,请看下面这张图:


【小贴士】平时摆弄手机App时,相信你有此体会:通常情况下,开了几个页面(activity)之后,点击手机上的返回键,就可以逐层后退。就比如上图中的例子,当我们操作到3号activity时,按一下返回键就可以退到2号activity界面,再按一下返回键,1号activity就又出现在屏幕上了,如果再按返回键,就退回到手机桌面了。其实这就是因为任务栈在帮我们保留所有操作过的activity,而且是按照我们操作的顺序保留的。最主要的是,任务栈帮我们保留了每一个操作过的activity的状态,比如屏幕滚动的位置、我们在可以编辑文本的地方输入的内容等等,这使得我们返回到操作过的页面时,看到页面还是我们刚刚操作时的样子。其实我们也可以通过一些方法让activity在开启时不被放置入任务栈(后面会有介绍),如果一个activity在开启时没有被放入任务栈,那么用户在按下后退按钮或者点击返回按键时,就永远不会再返回到这个activity页面了哦。


通常,设备的Home屏是任务栈开始的地方。因为当用户在Home屏上点击某个应

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值