android活动顺序,只需要一个当前活动的实例,而不是清除堆栈

时间:2014-05-02 15:34:55

标签: android android-activity single-instance launchmode

单独使用singleTask和singleInstance不是答案。

我在堆栈... n, n+1, n+2

中有活动 n+2中的

元素可以打开n+1

这会创建堆栈

... n, n+1, n+2, n+1

我希望它创建堆栈

... n, n+2, n+1,其中n+1移至堆栈顶部

singleTask创建此堆栈

... n, n+1

和singleInstance创建此堆栈

n+1所有以前的活动都已关闭。

我都不想要。

我可以使用任何启动模式吗?

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY只是为了让这个活动不再从头开始加载,但是没有清除历史记录中的重复活动,也许我可以使用一组标志?或者我可以在活动堆栈的索引中找到该活动,如果它不是最近的活动,则将其删除?

2 个答案:

答案 0 :(得分:2)

我认为你应该使用FLAG_ACTIVITY_REORDER_TO_FRONT。

  

如果在传递给Context.startActivity()的Intent中设置,则此标志将导致已启动的活动被带到其任务的历史堆栈的前面(如果它已在运行)。   例如,考虑一个由四个活动组成的任务:A,B,C,D。如果D调用具有解析为活动B的组件的Intent的startActivity(),则B将被带到历史堆栈的前面,使用此结果顺序:A,C,D,B。如果还指定了FLAG_ACTIVITY_CLEAR_TOP,则将忽略此标志。

答案 1 :(得分:0)

您应该只为您的意图添加FLAG_ACTIVITY_REORDER_TO_FRONT。如果没有该标志,您的场景将创建一个堆栈,如下所示:(启动活动A,启动B,然后再启动B)

TaskRecord{41ab0370 #23 A com.example.testproject U 0}
  Run #7: ActivityRecord{41c655a8 u0 com.example.testproject/.MainActivity}
  Run #6: ActivityRecord{41d378d0 u0 com.example.testproject/.SecondActivity}
  Run #5: ActivityRecord{41bf99b8 u0 com.example.testproject/.MainActivity}

但是使用该标志,没有任何特定的启动模式,您将得到以下堆栈,我认为它是您需要的堆栈:

TaskRecord{41d8a838 #25 A com.example.testproject U 0}
  Run #6: ActivityRecord{41d89590 u0 com.example.testproject/.MainActivity}
  Run #5: ActivityRecord{41c52b80 u0 com.example.testproject/.SecondActivity}