【磨叽教程】Android进阶教程之任务栈

副标题:Activity的几种启动模式详解

任务是用户在执行某项工作时与之互动的一系列 Activity 的集合。

这些 Activity 按照每个 Activity 打开的顺序排列在一个返回堆栈中形成任务栈

例如:
在电子邮件应用可能有一个 Activity 来显示新邮件列表。
当用户选择一封邮件时,系统会打开一个新的 Activity 来显示该邮件。
这个新的 Activity 会添加到任务堆栈中。如果用户按"返回"按钮,这个 Activity 即结束并从堆栈中退出。

版本差异:
Android 7.0(API 级别 24)及更高版本支持多窗口环境,当应用在这种环境中同时运行时,系统会单独管理每个窗口的任务;而每个窗口可能包含多项任务。
大多数任务都从设备主屏幕上启动。当用户轻触应用启动器中的图标(或主屏幕上的快捷方式)时,该应用的任务就会转到前台运行。如果该应用没有任务存在(应用最近没有使用过),则会创建一个新的任务,并且该应用的“主”Activity 将会作为堆栈的根 Activity 打开。
在当前 Activity 启动另一个 Activity 时,新的 Activity 将被推送到堆栈顶部并获得焦点。
上一个 Activity 仍保留在堆栈中,但会停止。
当 Activity 停止时,系统会保留其界面的当前状态。
当用户按"返回"按钮时,当前 Activity 会从堆栈顶部退出(该 Activity 销毁)。
上一个 Activity 会恢复(界面会恢复到上一个状态)。
堆栈中的 Activity 永远不会重新排列,只会被送入和退出。
在当前 Activity 启动时被送入堆栈,在用户使用返回按钮离开时从堆栈中退出。
因此,返回堆栈按照“后进先出”的结构运作。
下图借助一个时间轴直观地显示了这种行为。该时间轴显示了 Activity 之间的进展以及每个时间点的当前返回堆栈。【磨叽教程】Android进阶教程之任务栈_第1张图片
如果用户继续按"返回",则堆栈中的 Activity 会逐个退出,以显示前一个 Activity,直到用户返回到主屏幕(或任务开始时运行的 Activity)。移除堆栈中的所有 Activity 后,该任务将不复存在。也就是我们所说的"退出该应用"。
任务是一个整体单元,当用户开始一个新任务或通过主屏幕按钮进入主屏幕时,任务可移至“后台”。
在后台时,任务中的所有 Activity 都会停止,但任务的返回堆栈会保持不变。
当其他任务启动时,当前任务只是失去了焦点。

【磨叽教程】Android进阶教程之任务栈_第2张图片

图示: 两个任务:任务 B 在前台接收用户互动,任务 A 在后台等待恢复。

如图所示。这样一来,任务就可以返回到“前台”,以便用户可以从他们离开的地方继续操作。

举例来说,假设当前任务(任务 A)的堆栈中有 3 个 Activity,用户按主屏幕按钮,然后从应用启动器中启动新应用(任务 B)。主屏幕出现后,任务 A 转到后台。当新应用启动时,系统会启动该应用的任务(任务 B),该任务具有自己的 Activity 堆栈。若用户再次返回到主屏幕并选择最初启动任务 A 的应用。那么,任务 A 进入前台,其堆栈中的所有三个 Activity 都完好如初,堆栈顶部的 Activity 恢复运行。同理,用户仍可通过这种方式切换到任务 B。

这就是在 Android 上进行多任务处理的一个例子。

注意:多个任务可以同时在后台进行。但是,如果用户同时运行很多后台任务,系统可能会为了恢复内存而开始销毁后台 Activity,导致
Activity 状态丢失。

由于返回堆栈中的 Activity 不会被重新排列,如果您的应用中有一个特殊的Activity允许用户从多个 Activity 中启动,那么系统便会创建该特殊 Activity 的新实例并将其推送到堆栈中(而不是将该 Activity 的某个先前的实例移至堆栈顶部)。这样一来,应用中的一个 Activity 就可能被多次实例化(甚至是从其他任务对其进行实例化)。
【磨叽教程】Android进阶教程之任务栈_第3张图片

单个 Activity 会被多次实例化。

因此,如果用户使用"返回"按钮向后导航,Activity 的每个实例将按照它们被打开的顺序依次重新显示出来(每个实例都有自己的界面状态)。

不过,如果您不希望某个 Activity 被实例化多次,那么下节继续,现在我们先给这节做个总结:(更多内容请关注”计算机自学平台“公众号)

1、当 Activity A 启动 Activity B 时,Activity A 会停止,但系统会保留其状态(例如滚动位置和输入到表单中的文本)。如果用户在 Activity B 中按返回按钮,系统会恢复 Activity A 及其状态。
2、当用户通过按主屏幕按钮离开任务时,当前 Activity 会停止,其任务会转到后台。系统会保留任务中每个 Activity 的状态。如果用户稍后通过点按该任务的启动器图标来恢复该任务,该任务会进入前台并恢复堆栈顶部的 Activity。
3、如果用户按返回按钮,当前 Activity 将从堆栈中退出并销毁。堆栈中的上一个 Activity 将恢复。Activity 被销毁后,系统不会保留该 Activity 的状态。
4、Activity 可以多次实例化,甚至是从其他任务对其进行实例化。

你可能感兴趣的:(Android知识点总结)