使用FLAG_ACTIVITY_REORDER_TO_FRONT将活动置于最前面

Kai*_*Kai 18 android

我的活动堆栈是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年了,我假设你已经找到了另一种方法).

  • 我通过扩展A类开了一个新课. (4认同)