一、TaskRecord
TaskRecord 是 Android 操作系统中的一个核心类,用于表示一个任务(Task)在任务管理器中的状态和信息。任务在 Android 中是一个与应用程序相关的概念,通常表示一组活动(Activity)及其在堆栈中的位置。
二、TaskStack
TaskStack 是一个核心的概念,用于管理和组织 任务(Task),TaskStack对Task进行管理。
1.TaskStack 的功能:
- 管理任务和活动的栈顺序:任务栈负责维护任务栈中活动的顺序,栈底是任务栈最早的活动,栈顶是当前显示的活动。
- 任务切换:当用户在任务之间切换时,任务栈管理任务栈的活动顺序,确保任务的上下文被保留。当用户返回到任务栈中的活动时,它们按用户切换的顺序恢复。
- 清理和销毁:当一个任务完成并不再需要时,任务栈会销毁任务中的活动,释放资源。
2.TaskStack 与任务亲和性(taskAffinity) :
taskAffinity是每个活动的一个属性,它决定了该活动是否与其他活动共享任务栈。默认情况下,活动的taskAffinity设置为其应用的包名,这意味着一个应用的活动通常会放入该应用的任务栈中。- 但通过修改
taskAffinity,可以使不同应用的活动共享同一个任务栈。例如,应用 A 的活动和应用 B 的活动可以被安排在同一个任务栈中,形成跨应用的任务。
3.launchMode 和任务栈的关系
launchMode(如 standard、singleTop、singleTask 和 singleInstance)影响一个活动是否会被添加到当前任务栈中,或者是否会启动新的任务栈。例如:
singleTask:如果一个活动以singleTask启动模式启动,它会在任务栈中查找是否已经有这个活动,如果有,它将复用任务栈并销毁当前栈中的其他活动。这使得活动可以跨应用存在于同一个任务中。standard:每次启动都会在任务栈中创建新的实例。
三、ActivityStack
ActivityStack 代表一个 任务(Task) 中的活动栈。它用于管理一个任务中的所有活动,并按顺序维护这些活动的生命周期。每个活动栈的结构遵循典型的 后进先出(LIFO) 规则,即栈顶的活动是当前正在显示的活动,最底部的活动是任务栈中的第一个活动。
1. ActivityStack 和 TaskStack 之间的关系:
ActivityStack:每个任务栈(TaskStack)对应一个活动栈(ActivityStack),用于管理单个任务中的活动(Activity)的入栈、出栈操作。ActivityStack负责管理任务栈中活动的顺序和生命周期。TaskStack:TaskStack是一个包含多个活动栈(ActivityStack)的集合。一个任务栈可以包含一个或多个活动栈。任务栈将活动栈组织在一起,表示一个特定的任务或应用的任务集合。
2. 新的活动压入栈的过程:
-
如果是启动同一个任务栈中的活动:
当应用启动一个新的活动,并且该活动属于同一个任务栈时,新的活动会被压入ActivityStack中。这意味着该活动会加入当前任务栈的活动栈中,活动栈的顺序会发生变化。- 例如:用户从应用 A 的主界面启动了一个新页面(例如设置界面)。这时,新的设置界面会被压入
ActivityStack中,原本的主界面会被保留在活动栈中,新的活动会成为栈顶的活动。
- 例如:用户从应用 A 的主界面启动了一个新页面(例如设置界面)。这时,新的设置界面会被压入
-
如果是启动一个新任务栈中的活动:
如果该活动属于一个新的任务栈,系统会 创建一个新的TaskStack,并将新的活动压入这个新创建的栈中,同时也会建立一个新的ActivityStack来管理这个任务栈中的活动。- 例如:用户从应用 A 跳转到应用 B。如果应用 B 是独立的任务(或者没有共享
taskAffinity),那么应用 B 会启动一个新的任务栈,新的任务栈包含应用 B 的活动,并创建新的活动栈来管理应用 B 中的活动。
- 例如:用户从应用 A 跳转到应用 B。如果应用 B 是独立的任务(或者没有共享