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