Products
GG网络技术分享 2025-08-16 22:18 4
个个Activity在启动时都需要选择一种启动模式, 共有四种:standard、singleTop、singleTask、singleInstance。不同的启动模式会关系到Activity的运行方式,与任务栈关系密切那个。
flag_activity_new_task是Android中用于控制Activity启动方式的一个标记位,用这玩意儿标记位能让Activity在一个新鲜的任务栈中启动。但是用这玩意儿标记位也需要注意一些问题, 比如Activity生命周期的关系到、优良几个Activity用标记位时的任务栈关系等等。
如果我们在已经启动了一个Activity的情况下 启动这玩意儿Activity时Android系统会默认将这玩意儿Activity置于栈顶。如果我们想在启动这玩意儿Activity时 不希望这玩意儿Activity被再来一次启动,能用Intent.FLAG_ACTIVITY_CLEAR_TOP标记位,让这玩意儿Activity回到栈顶。
比如 我们能用如下的代码实现:
Intent intent = new Intent;
intent.setFlags;
startActivity;
当设置这玩意儿标记位时启动的Activity会被放置在一个新鲜的任务栈中,而不是在目标Activity所在的任务栈中。这种方式的启动方式会对Activity的生命周期造成一定程度的关系到,需要我们谨慎用。
如果我们在应用中优良几个Activity用flag_activity_new_task启动,那么这些个Activity将会被放置在同一个任务栈中。这玩意儿任务栈的层级关系如下所示:
根任务栈
├ 任务栈1
│ ActivityA
│ ActivityB
├ 任务栈2
│ ActivityC
│ ActivityD
能看出, 不同的任务栈之间是相互独立的,而同一个任务栈内的Activity之间是能相互切换的。
用flag_activity_new_task启动Activity会关系到Activity的生命周期。基本上原因是Activity启动时被放到了一个新鲜的任务栈中, 这玩意儿新鲜的任务栈与原来的任务栈是彻头彻尾独立的,所以当我们返回到原来的任务栈时原来的Activity会被销毁,并沉建一个新鲜的Activity。
比如 用如下的代码能让目标Activity在一个新鲜的任务栈中启动:
Intent intent = new Intent;
intent.setFlags;
startActivity;
这玩意儿代码中,我们用了Intent指定了目标Activity,并用setFlags方法设置了flag_activity_new_task标记位,然后通过startActivity方法启动了目标Activity。
轻巧松 用flag_activity_new_task能让一个Activity在一个新鲜的任务栈中启动,这玩意儿新鲜的任务栈会被放在应用的根任务栈中。
Demand feedback