场景:Aapp 跳转B app 没跳过去 在A的app中 打开了B app里的页面
解决:在intent中添加
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
因为非Activity类型的context需要添加这个标志,它决定了 Activity 如何与任务(task)中的其他 Activity 交互
Activity.FLAG.ACTIVITY_NEW_TASK 标志主要用于确保当从一个非 Activity 类型的 Context(例如,一个 Service 或 Application)启动 Activity 时,该 Activity 会被放置在一个新的任务(task)栈中。
首先,Android系统是基于任务和返回栈(Back Stack)的概念来管理用户与Activity之间的交互的。每个任务通常与一个或多个Activity相关联,并且这些Activity按照它们被启动的顺序在返回栈中排列。当用户与Activity交互时(如点击按钮启动新Activity),这些Activity会被推入(push)到返回栈中。当用户按下后退按钮时,它们又会从栈中弹出(pop)并销毁。
在标准的用户界面中,Activity通常是由另一个Activity启动的。在这种情况下,新启动的Activity会自然地被推入到启动它的Activity所在的任务栈中。然而,当非Activity的Context(如Service或Application)尝试启动Activity时,系统就面临一个挑战:它不知道应该将这个Activity推入哪个任务栈,因为没有明确的“父”Activity来确定其归属。
为了解决这个问题,Android引入了Activity.FLAG_ACTIVITY_NEW_TASK标志。当这个标志被设置时,系统知道需要为这个Activity创建一个新的任务栈(如果它还不存在的话),并将这个Activity作为新栈的根Activity。这确保了Activity能够被正确地管理,并且用户可以通过标准的任务切换机制(如长按Home键或使用多任务按钮)来访问它。
至于为什么Android不直接为这种情况实现默认行为,这可能与灵活性和控制性有关。通过要求开发者显式地设置这个标志,Android允许开发者更精细地控制Activity的启动和管理。开发者可以根据应用的具体需求和用户体验来决定是否创建新的任务栈,或者是否将Activity推入到现有的任务栈中。这种灵活性使得Android应用能够适应各种复杂的场景和用例。