我想从服务上下文开始一个活动。但是我必然会使用flag = Intent.FLAG_ACTIVITY_NEW_TASK来创建活动的多个实例,因为它会抛出其他标志的Run-Time-Exception。 我们如何从服务中启动一个活动,以便不会创建多个活动实例,如果已经在最近的任务中启动它只会启动它?
答案 0 :(得分:0)
您可以组合使用不同的标记,例如FLAG_ACTIVITY_CLEAR_TOP
如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在在最前面)作为新意图的旧活动。
...
此启动模式也可以与FLAG_ACTIVITY_NEW_TASK结合使用:如果用于启动任务的根活动,它会将该任务的任何当前运行的实例带到前台,然后将其清除到其根目录州。这在从通知管理器启动活动时尤其有用。
如果在传递给Context.startActivity()的Intent中设置,则此标志将导致在活动开始之前清除与活动关联的任何现有任务。也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成。这只能与FLAG_ACTIVITY_NEW_TASK一起使用。
使用FLAG_ACTIVITY_NEW_TASK。使用哪一个取决于您想要实现的目标。 检查Intent类和Tasks and Back Stack中的标志文档。