我的活动堆栈是A1 B A2,顶部是A2.
A1和A2是相同活动的实例,A.现在在A2中,我希望A2退出并将A1带到前面,所以最后的堆栈应该是B A1.我该如何实施呢?
我执行的当前代码是:
finish();
intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
上面的代码将B带到了前面,所以最后的堆栈是A1 B,这不是我的预期.
任何的想法?
谢谢.
Dav*_*ser 20
使用Intent标志无法执行您想要的操作.
原因在于它的FLAG_ACTIVITY_REORDER_TO_FRONT运作方式.当您使用此标志时,Android会在活动堆栈中查找所需活动的实例,从堆栈的前端开始扫描,直到它到达堆栈的根/后端.一旦找到指定活动的实例,它就会将该实例带到前面(即:如果指定活动有多个实例,它将把最新实例带到前面).
在您的情况下,活动堆栈如下所示:
A1, B, A2 (front of task)
Run Code Online (Sandbox Code Playgroud)
在尝试重新排序您的活动A时,Android首先找到实例A2并将其重新排序到任务的前面.当然,它已经处于任务的前沿,所以这并没有真正做任何事情.
当然你已经调用finish()了这个活动,你已经尝试过(通过使用FLAG_ACTIVITY_PREVIOUS_IS_TOP)告诉Android它在决定做什么时不应该考虑当前的活动,但是这一切都被忽略了.Android将A2视为活动A的最新实例,并将其重新排序到前端.然后A2完成,活动B成为任务的前端.用户看到"B",活动堆栈是:
A1, B (front of task)
Run Code Online (Sandbox Code Playgroud)
你需要找到另一种方法来达到预期的效果(因为这篇文章差不多有2年了,我假设你已经找到了另一种方法).
| 归档时间: |
|
| 查看次数: |
26643 次 |
| 最近记录: |