首页 理论教育 任务和回退栈的管理策略

任务和回退栈的管理策略

时间:2023-06-30 理论教育 版权反馈
【摘要】:一个任务就是用户为了执行特定工作而与之交互的Activity的集合,这些Activity会根据被打开的顺序被安放在一个栈(回退栈)中。图4-4演示了沿着时间线回退栈在不同时刻的进度。这时,任务A回到前台,栈中的3个Activity都原封未动,并且恢复在栈顶的Activity。图4-5任务回退栈的变化图4-6Activity被实例化多次因为在回退栈中的Activity从来不会被重排,如果应用允许用户从多个Activity启动一个特定的Activity,那么会新创建该Activity的一个实例并把它放到栈顶。

任务和回退栈的管理策略

一个应用通常有多个Activity。每个Activity围绕一个特定的功能设计,用户可以操作它,并且可以启动其他的Activity。例如:一个电子邮件应用可能有一个Activity去呈现新邮件列表,当用户选择了一封电子邮件,会打开一个新的Activity来呈现邮件的内容。

一个Activity可以启动另一个应用的Activity。例如,如果想要发送Email,可以定义一个Intent来执行一个发送操作,并且携带一些数据,如Email的地址和消息。一个其他应用的Activity需要声明可以处理这类Intent。在上面的例子中,Intent是要发送一封Email,所以一个Email应用会启动(如果有多个Activity支持同一个Intent,系统会让用户选择要使用哪一个)。当Email被发送出去,Activity会恢复,故Email Activity就是应用的一部分。为了维护这种无缝的用户体验,尽管Activity可能来自不同的应用,Android系统依然会将这些Activity都保存在同一个任务中。

一个任务就是用户为了执行特定工作而与之交互的Activity的集合,这些Activity会根据被打开的顺序被安放在一个栈(回退栈)中。

设备的主屏幕是大多数任务的启动场所。当用户触摸一个应用图标,该应用的任务就会来到前台。如果该应用当时没有任务,就会创建一个新任务,同时,主Activity就会作为这个栈中的根Activity而被打开。

当一个Activity启动另一个Activity时,这个新的Activity会被放到栈的顶端并且获得焦点。前一个Activity仍然保存在栈中,但已经被停止了。当一个Activity停止,系统会保存用户界面的当前状态。当用户按下【返回】按钮,当前的Activity被弹出栈(Activity会被销毁),并且恢复前一个Activity(使用刚被保存的UI状态恢复)。在栈中的Activity只有弹出和压入两种操作:被当前Activity启动时压入,用户使用“返回”按钮离开时弹出,除此之外,栈中Activity的位置和顺序都不会发生变化。正因为如此,回退栈的操作符合“后进先出”的原则。图4-4演示了沿着时间线回退栈在不同时刻的进度。

图4-4 管理Activity的栈结构(www.xing528.com)

如果用户继续按“返回”,那么在栈中所有的Activity都会被弹出,直到用户返回到主屏幕(或者返回到该任务开始的地方)。当所有的Activity都从栈中移除后,任务就不复存在了。

任务就是一个完整单元,当用户开始一项新任务或者回到主屏幕(通过主屏幕按钮)时,它会被移到后台。当任务进入后台,栈中所有的Activity都会停止,但是任务的回退栈会保持原封不动;当任务被另一个任务取代时,只会简单地失去焦点,如图4-5所示,任务可以重回到前台。例如,有3个Activity在当前任务(任务A)的栈中,其中两个在当前Activity的下面。这时,用户按下[Home]键回到主屏幕,然后启动一个新的应用。当显示主屏幕时,任务A进入后台。当新应用启动时,系统为该应用启动了一个新任务(任务B)。当用户与该应用交互完毕之后,重新回到主界面,并且选择任务A的应用。这时,任务A回到前台,栈中的3个Activity都原封未动,并且恢复在栈顶的Activity。此时用户依然可以按下[Home]键返回主屏幕,选择任务B的应用图标来切换到任务B(也可以通过最近使用应用列表启动)。这就是Android多任务的一个实例。

图4-5 任务回退栈的变化

图4-6 Activity被实例化多次

因为在回退栈中的Activity从来不会被重排,如果应用允许用户从多个Activity启动一个特定的Activity,那么会新创建该Activity的一个实例并把它放到栈顶。因此,在应用中一个Activity可能被实例化多次,如图4-6所示。用户使用回退键返回,那么每个Activity的实例会按照被打开的反向顺序被显示。如果不想把一个Activity实例化多次,也可以修改这种行为。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈