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

时间:2016-08-04 11:37:08

标签: java android android-intent

当点击推送通知时,我使用类似的东西来启动我想要的意图:

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 个答案:

答案 0 :(得分:2)

AFAIK

FLAG_ACTIVITY_SINGLE_TOP不会创建新任务来启动自己。它始终依靠上一个活动的任务来启动自身(与此同时,它还会检查堆栈中是否已经存在一个实例,并显示该实例是否可用。无论哪种方式,它都不会创建新任务)

其中

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

我知道这种感觉还是一样的,但是这里的主要区别是,在{strong>首次使用时间时,FLAG_ACTIVITY_SINGLE_TOP启动了一项活动,该活动依赖于现有任务和FLAG_ACTIVITY_NEW_TASK创建一个新任务