Tasts and Back Stack

来源:互联网 发布:哥本哈根会议 知乎 编辑:程序博客网 时间:2024/06/07 12:30
        一个应用程序通常包含多个Activity。每一个Activity都应该围绕一个特定的行为来设计,用户可以执行并可以开始其他Activity。例如,一个电子邮件应用程序可能有一个Activity显示新邮件列表。当用户选择一个消息时,一个新的Activity将打开以查看该消息。
        一个Activity甚至可以启动其他应用程序中存在的Activity。例如,如果你的应用程序想发送电子邮件,你可以定义一个Intent来执行一个“send”的行动,包括一些数据,如电子邮件地址和邮件。另一个应用程序的Activity,声明自己来处理这种Intent,然后打开。在这种情况下,意图是发送电子邮件,所以一个电子邮件应用程序的“conpose”Activity开始(如果多个Activity支持相同的Intent,那么系统允许用户选择使用哪一个)。当发送电子邮件时,你的Activity恢复,似乎是你的应用程序的一部分。即使这些Activity可能来自不同的应用程序,安卓保持这种无缝的用户体验,在同一任务中保持两个Activity。 任务是用户在执行特定任务时进行交互的Activity集合。Activity安排在一个堆栈(后面堆栈)中,以使每个Activity都打开。
        设备主屏幕是大多数任务的起始位置。当用户在应用程序启动程序(或在主屏幕上的快捷方式)上触摸图标时,应用程序的任务就涉及到前台。如果应用程序不存在任务(最近的应用程序不使用),则创建一个新任务,并将该应用程序的“主”Activity打开为堆栈中的根活动。
        当当前Activity启动另一个Activity时,新的Activity将被推到堆栈的顶部并以焦点为焦点。先前的Activity仍然在堆栈中,但已停止。当一个Activity停止时,系统将保留其用户界面的当前状态。当用户按下按钮,当前Activity是从栈顶弹出(Activity被破坏)和以前的Activity恢复(以前的状态,它的用户界面恢复)。堆栈中的Activity从未被重新安排,只从栈顶推,从栈顶推到堆栈上,当用户离开时,它就开始使用该按钮。因此,反栈操作为“上一次,先出”对象结构。图1将这一行为与时间轴显示Activity之间的进展以及在每一个时间点,当前堆。

        图1。如何在任务中每一个新Activity的一个表示增加一个项目到后面堆栈。当用户按下“后退”按钮时,当前Activity被破坏,以及先前的Activity恢复。
        如果用户继续按回,然后栈中的每一个Activity都会弹出,以显示前一个,直到用户返回主屏幕(或以任何Activity为任务开始时运行)。当所有的Activity都从堆栈中移除时,任务就不存在了。

        任务是一个有凝聚力的单位,当用户开始一个新的任务或进入家庭屏幕,通过家庭按钮,可以移动到“背景”。虽然在后台,所有的Activity都被停止了,但任务的后堆栈仍然完整,任务只需失去焦点,而另一个任务发生,如图2所示。然后一个任务可以返回到“前台”,这样用户就可以在他们离开的地方提取。例如,假设当前任务(任务一)有三个Activity在其堆栈中的当前Activity。用户按下家庭按钮,然后开始一个新的应用程序从应用程序启动。当家庭屏幕出现时,任务进入背景。当新的应用程序启动时,系统将启动该应用程序的任务(任务组)与它自己的Activity堆栈。与该应用程序进行交互之后,用户再次返回家园,并选择最初开始任务的应用程序。现在,任务一到前台的所有三个Activity都是完整的,并在堆栈的顶部进行Activity。在这一点上,用户还可以通过回家和选择启动任务的应用程序图标(或通过选择应用程序的任务从概要屏幕)切换回任务。这是一个关于安卓多任务的例子。
注:多任务可以在后台举行一次。但是,如果用户同时运行多个背景任务,系统可能会开始破坏背景Activity,以便恢复内存,导致Activity状态丢失。关于Activity状态见下面的节。
        因为在后堆栈中的Activity从未被重新安排,如果您的应用程序允许用户从多个Activity开始某个特定的Activity,则创建和推到堆栈(而不是将Activity的任何先前实例推到顶部)。因此,你的应用程序的Activity可能被实例化多次(甚至来自不同的任务),如图3所示。例如,如果用户使用后退按钮导航后退,Activity的每个实例显示的顺序被打开(每个人都有自己的UI状态)。然而,你如果你不想让一个Activity被实例化多次修改此行为。如何在以后的章节中讨论管理任务。
        总结Activity和任务的默认行为:
1 )当新Activity开始时,旧的Activity已停止,但系统保留其状态(如滚动位置和文本输入的形式)。如果用户在新的Activity期间按“后退”按钮,则恢复旧的Activity其状态。
2 )当用户按下家庭按钮完成任务时,当前Activity被停止,任务进入背景。该系统保留在任务中的每一个Activity的状态。如果用户稍后恢复任务,选择启动任务的启动图标,任务就到前台,然后在堆栈顶部恢复Activity。
3 )用户按“后退”按钮,当前Activity是从堆栈中弹出并销毁。在堆栈中的先前的Activity恢复。当一个Activity被破坏,系统不保留Activity的状态。
4 )Activity可以被实例化多次,甚至从其他任务。

1 0
原创粉丝点击