在Android系统中,任务栈是一个核心的导航回退概念,它并非一个程序员直接操作的类,而是一种由系统维护的、用于管理活动(Activity)返回逻辑的机制。

任务栈(Task)可以理解为一系列活动的集合,这些活动按照用户打开的先后顺序被排列在一个堆栈中。栈遵循“后进先出”的原则。用户启动一个应用时,通常会为该应用创建一个新的任务栈,该应用的主活动(Main Activity)会被置于栈底。随后启动的每一个新活动(除非特别指定)都会被压入同一个任务栈的栈顶。当用户按下设备的返回键时,栈顶的活动会被销毁并出栈,前一个活动则会成为新的栈顶并显示给用户。
任务栈的关键特性与行为由活动启动模式(Launch Mode)和意图标志(Intent Flags)共同控制:
1. 标准模式(standard):默认模式。每次启动该活动都会创建一个新的实例,并将其压入当前任务栈的栈顶。
2. 单顶模式(singleTop):如果该活动的实例已经存在于当前任务栈的栈顶,则不会创建新实例,而是通过onNewIntent()方法将意图传递给这个已有实例。如果不在栈顶,则行为同标准模式。
3. 单任务模式(singleTask):系统会为这个活动创建一个新的任务栈(如果尚不存在),并且确保在整个系统中该活动只有一个实例存在。如果该活动已存在于某个任务栈中,系统会将该任务栈切换到前台,并清除该活动上方所有的其他活动,使其位于栈顶。
4. 单实例模式(singleInstance):与单任务模式类似,但更为严格。拥有此模式的活动会独占一个任务栈,且该任务栈中只能有它这一个活动实例。
此外,通过设置Intent标志(如FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP等),可以在启动时动态地影响活动在任务栈中的行为。
任务栈的管理对于实现清晰的用户体验至关重要。它确保了用户可以通过返回键 predictable地导航回之前的界面。同时,它也允许多个应用的活动交织在同一个逻辑任务中(例如,从邮件应用启动浏览器查看链接),而系统仍能管理好它们的返回逻辑。开发者需要深入理解这些机制,以避免出现意外的导航行为和多个活动实例。

查看详情

查看详情