为什么同时使用Intent.FLAG_ACTIVITY_NEW_TASK和Intent.FLAG_ACTIVITY_SINGLE_TOP?

Avi*_*ida 5 java android android-intent

单击推送通知时,我使用类似的方法来启动我想要的意图:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
ctx.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

它的部分代码我从一个教程中获得,但我并没有真正理解同时使用的FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_SINGLE_TOP

从文档:

FLAG_ACTIVITY_NEW_TASK(在API级别1中添加):

使用此标志时,如果现在正在为您正在启动的活动运行任务,那么将不会启动新的活动;而是,相反,当前任务将以其上次进入的状态简单地显示在屏幕的前面。

FLAG_ACTIVITY_SINGLE_TOP(在API级别4中添加):

如果设置了该活动,则如果该活动已经在历史记录堆栈的顶部运行,则不会启动该活动。

对我来说,这两个听起来很像,我的意思是,NEW_TASK确保您的活动中已经存在您的活动,那么将不会创建新任务,而是会显示旧任务(据我所知,可以在顶部显示不同的活动),SINGLE_TOP仅在活动不在堆栈顶部时才会启动活动(因此这意味着同一活动将有2个或更多实例)吗?

我的问题是:两者之间有区别吗?

Cer*_*lin 6

AFAIK

FLAG_ACTIVITY_SINGLE_TOP不会创建一个新任务来启动自己。它总是依赖于前一个活动的任务来启动自己(同时,它会检查堆栈中是否已经有一个实例并显示它是否可用。无论哪种方式,它都不会创建新任务)

然而

FLAG_ACTIVITY_NEW_TASK 确实会创建一个新任务,除非有一个具有相同活动的任务。

我知道这有点感觉一样,但是当一个活动与启动这里的关键区别是FLAG_ACTIVITY_SINGLE_TOP对于第一次,它依赖于现有任务和FLAG_ACTIVITY_NEW_TASK创建新任务