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

9

当点击推送通知时,我会使用类似以下代码来启动所需的意图:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
ctx.startActivity(intent);

这是我从教程中提取的代码片段,但我并不真正理解FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_SINGLE_TOP的用途。
根据文档:
FLAG_ACTIVITY_NEW_TASK (在API级别1中添加):
使用此标志时,如果已经为您现在要启动的活动运行了任务,则不会启动新活动;相反,当前任务将以其最后状态显示在屏幕前面。
FLAG_ACTIVITY_SINGLE_TOP(在API级别4中添加):
如果设置,那么当它已经在历史堆栈的顶部运行时,该活动将不会被启动。
对我来说两者听起来很像, 我的意思是它听起来像NEW_TASK确保如果您的活动已经存在于任务中,则不会创建新任务,而是旧任务会出现(据我理解,在顶部有不同的活动),SINGLE_TOP仅在它不在堆栈顶部时才启动活动(这是否意味着将有2个或更多个相同活动的实例)?
我的问题是:它们之间是否有差异需要同时使用它们?
1个回答

8

AFAIK

根据我所知:

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

然而

FLAG_ACTIVITY_NEW_TASK 除非存在具有相同活动的任务,否则会创建新任务。

我知道这两者感觉上差不多,但关键的区别在于使用 FLAG_ACTIVITY_SINGLE_TOP第一次启动活动时,它依赖于现有任务,而使用 FLAG_ACTIVITY_NEW_TASK 则会创建新任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接