在活动之间切换的意图杀死了我的第二个活动

时间:2012-10-01 13:26:03

标签: android android-intent android-activity

这是我的问题: 我的应用程序中有多个活动,其中两个有点“特殊”。 活动A是一种家庭类型的活动,用于启动其他活动。它还包含一些其他信息,可以从后台更新(使用onNewIntent)。在清单中我已将其声明为singleTop。它为结果启动其他活动,因此它不能是singleTask或Instance(startActivityForResult不能与它们一起使用)。 活动B是一个独立的活动,在某些事件上启动,也被声明为singleTop。它还会为结果启动其他活动,并使用其onNewIntent。 我有两个单独的通知,它们链接到相应的Activity。 我正在使用这两个

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

正常流程是:

  1. A正在运行
  2. 发生了一些事情 - B已启动
  3. 如果用户按下主页按钮,我有两个A和B通知
  4. 问题是: 如果用户按下A的通知,则启动A,但B被杀死(由于clear_top标志) 如果在该用户按下B的通知后,新的B启动(活动已经死亡,但我需要旧的实例

    我读过这篇文章 - http://developer.android.com/guide/components/tasks-and-back-stack.html 根据我的理解,FLAG_ACTIVITY_NEW_TASK应该在单独的任务中启动活动,FLAG_ACTIVITY_CLEAR_TOP在这种情况下不应该杀死B.

    解决方法是重新编写逻辑,使它们成为singleTasks并处理onNewIntent中其他活动的结果,但如果可能的话,我宁愿不采用这种方式。 我也试过了

    FLAG_ACTIVITY_REORDER_TO_FRONT | FLAG_ACTIVITY_SINGLE_TOP 
    

    FLAG_ACTIVITY_MULTIPLE_TASK | FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP
    

    启动B,但都不起作用。

1 个答案:

答案 0 :(得分:0)

我的问题是,两个活动都在同一个任务上运行。尽管文档FLAG_ACTIVITY_NEW_TASK没有在新任务中启动Activity,但它放置了。您必须在该特定活动的清单中使用android:taskAffinity并将其设置为唯一值。只有这样,它才会在新任务中启动。这样,用于A的FLAG_ACTIVITY_CLEAR_TOP不会破坏B。