1

单独的 singleTask 和 singleInstance 不是答案。

我在堆栈中有活动 ... n, n+1, n+2

n+2可以打开的元素n+1

这会创建堆栈

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

我希望它创建堆栈

... n, n+2, n+1, wheren+1被移到栈顶

singleTask 创建这个堆栈

... n, n+1

和 singleInstance 创建这个堆栈

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

我都不想要。

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

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

4

2 回答 2

2

我认为你应该使用 FLAG_ACTIVITY_REORDER_TO_FRONT。

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

于 2014-05-02T16:04:06.620 回答
0

您应该将 FLAG_ACTIVITY_REORDER_TO_FRONT 添加到您的意图中。如果没有该标志,您的方案将创建如下堆栈:(启动活动 A,A 启动 B,然后 B 再次启动 A)

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}
于 2014-05-02T16:14:58.770 回答