Activity之任务和返回栈

来源:互联网 发布:打电话变声的软件 编辑:程序博客网 时间:2024/06/06 20:45

   一个应用程序中会有多个activity,每个activity一般都有自己独立的功能。我们可以用activity启动自己应用中的另一个activity。例如:从一个数据列表界面,跳转到一个数据详情界面。也可以用我们的activity去打开其他应用的activity,比如要发送一封邮件。就是使用intent去跳转到邮箱应用的activity中,邮件发送完成之后,点击返回就可返回。

即使有很多activity分别来自不同的应用程序的,Android系统任然可以将它们无缝的结合在一起,之所以能实现这一点,就是因为这些Activity都是存在于一个相同的任务(Task)当中的。

任务是一个activity的集合,它使用栈的方式来管理其中的activity,这个栈又被称为返回栈(back stack),栈中activity的顺序就是按照它们打开的顺序依次存放的。

手机的home界面是大多数任务的开始的地方,当用户在手机桌面点击一个应用的图标时,这个应用的任务就会被转移到前台。如果目前这个应用并没有任何一个任务的话(说明这个应用最近没有被启动过),系统就会创建一个新的任务,并且将该应用的主activity放入到返回栈当中。

一个应用的后台任务(task)可能有多个(和启动模式有关)。但是在多任务键中表现出来的一个应用只有一个后台栈。

当一个activity启动另一个activity的时候,新的Activity就会被放置到返回栈的栈顶并获取焦点。前一个Activity仍然保留在返回栈当中并处于停止状态。当用户按下返回键的时候,栈中最顶端的Activity会被移除,然后前一个Activity重新回到最顶端的位置。栈中的Activity的顺序永远不会发生改变,我们只能向栈顶添加Activity,或者将栈顶的Activity移除掉。因此,返回栈是一个典型的后进后出的(last in,first out)的数据结构。
图例Activity在栈中的运行变化:
这里写图片描述

如果用户一直按Back键,这样返回栈中的Activity会被一个一个的移除,直到最终返回到主屏幕。当返回栈中的所有的Activity都被移除的时候,对应的任务就不存在了。

任务除了可以被移除到前台之外,当然也是可以被转移到后台,当用户启动一个新任务,或者点击home键回到主屏蔽的时候,之前的任务栈就会被转移到后台了。当任务处于后台状态时,返回栈中的所有Activity都会进入停止状态,但这些Activity在栈中的顺序都会原封不动的保留着:如下图
这里写图片描述

这个时候,用户还可以将任意后台的任务切换到前台,这样用户应该就会看到之前离开的这个任务时处于最顶端的那个Activity. 举个例子来说,当前任务A的栈中有三个Activity,现在用户按下Home键,然后点击桌面图标又启动另外一个应用程序。当系统回到桌面的时候,任务A已经进入后台,然后其他另一个应用程序时,系统会为这个程序开启一个新的任务(任务B)。当用户使用完这个程序之后,再次按Home键回到桌面,这个时候任务B也进入了后台。然后用户又重新打开了第一次使用的程序,这个时候任务A又回到前台,A任务栈中的三个Activity任然保留着刚才的顺序 ,最顶端的Activity将重新变为运行状态。

图示Android多任务切换的实例:
这里写图片描述