Android activity order,只需要当前activity的一个实例,而不是清除堆栈



单是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只使得这个活动不再从头开始加载,但不清除历史上重复的活动,也许有我可以使用的标志组合?或者我可以在活动堆栈的索引中找到该活动并删除它,如果它不是最近的活动?

我认为你应该使用FLAG_ACTIVITY_REORDER_TO_FRONT。

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

你应该只添加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}

相关内容

  • 没有找到相关文章

最新更新