当点击推送通知时,我使用类似的东西来启动我想要的意图:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
ctx.startActivity(intent);
这是我从教程中获取的代码的一部分,但我并不真正理解FLAG_ACTIVITY_NEW_TASK
和FLAG_ACTIVITY_SINGLE_TOP
的使用。
来自文档:
FLAG_ACTIVITY_NEW_TASK(在API级别1中添加):
使用此标志时,如果某个任务已在运行该活动 你现在开始,然后一个新的活动将不会开始; 相反,当前的任务将被简单地带到前面 屏幕显示它最后的状态。
FLAG_ACTIVITY_SINGLE_TOP(在API级别4中添加):
如果设置,则如果活动已在运行,则不会启动该活动 历史堆栈的顶部。
这两个声音对我来说都很相似,我的意思是NEW_TASK
听起来确保如果你的活动已经存在于一个任务中,那么就不会创建一个新任务但是旧任务会出现(据我所知) ,可以在顶部显示不同的活动),SINGLE_TOP
只会启动活动,如果它不在堆栈的顶部(那么是否意味着将有2个或更多相同活动的实例)?
我的问题:他们之间是否存在需要同时使用的问题?
答案 0 :(得分:2)
AFAIK
FLAG_ACTIVITY_SINGLE_TOP
不会创建新任务来启动自己。它始终依靠上一个活动的任务来启动自身(与此同时,它还会检查堆栈中是否已经存在一个实例,并显示该实例是否可用。无论哪种方式,它都不会创建新任务)
其中
FLAG_ACTIVITY_NEW_TASK
会创建一个新任务,除非有一个具有相同活动的任务。
我知道这种感觉还是一样的,但是这里的主要区别是,在{strong>首次使用时间时,FLAG_ACTIVITY_SINGLE_TOP
启动了一项活动,该活动依赖于现有任务和FLAG_ACTIVITY_NEW_TASK
创建一个新任务