gpt4 book ai didi

android - 如果使用 FLAG_ACTIVITY_REORDER_TO_FRONT,后退按钮不会加载堆栈中的最后一个 Activity

转载 作者:太空狗 更新时间:2023-10-29 13:13:31 24 4
gpt4 key购买 nike

我有两个屏幕,A 和 B。屏幕 A 有一个启动 Activity B 的按钮,屏幕 B 有一个启动 Activity A 的按钮。

预期的行为是,如果 Activity 在后台堆栈中可用,则应将其重新排序到前台而不创建新 Activity 。为此,我在两个 Activity 的点击事件上添加了标志 FLAG_ACTIVITY_REORDER_TO_FRONT。这是监听器代码。

Button btn=(Button)findViewById(R.id.button);
final Activity activity=this;
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent=new Intent(activity,ScreenB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
});

这是预期的结果。 A 是第一个屏幕(启动后,所以 A 不是启动器屏幕)。

  • 堆栈是“A(顶部)”
  • 点击屏幕 A 上的按钮。屏幕 B 是(新创建的)启动。堆栈是“A->B(Top)”
  • 现在点击屏幕 B 上的按钮。屏幕 A 已启动(重新排序到前面)。栈是“B->A(Top)”

此时,如果按下后退按钮,A 应该被移除,B 应该可见(理论上)。但是发生的是,后退按钮上的应用程序不再可见,移动设备的主页启动器出现。如果我从最近的应用程序中重新打开应用程序,它会在 B 处打开。这意味着当按下后退按钮时 B 必须在堆栈中,但应用程序没有显示它,而是退出并显示了移动启动器。

我还应该做什么才能获得预期的行为?

我添加了屏幕 C(第 3 个屏幕)进行测试

现在我有 3 个屏幕。全部都有两个按钮来启动另外两个。

  • 堆栈是“A(顶部)”
  • 在屏幕 A 中,单击 ButtonB,启动 B(新建),堆栈 A->B(顶部)
  • 从屏幕 B,单击 ButtonC,启动 C(新),堆栈 A->B->C(顶部)
  • 在屏幕 C 中,单击 ButtonA,启动 A(重新排序),堆栈 B->C->A(顶部)
  • 按下后退按钮,A 被移除,应用程序退出,移动启动器可见。堆栈 B->C(顶部)
  • 从最近使用的应用列表中打开了应用。 C可见。堆栈 B->c(上)
  • 按下后退键,C 被移除,B 可见。堆栈 B(顶部)。此时它的行为是正确的。

最佳答案

这是 Android 中的一个已知问题,在 Kitkat (4.4.2) 之后再次出现并且尚未修复。有关上述问题的更多信息,请参阅此 link .

question包含关于该主题的更详尽的讨论,但总的来说,存在解决此问题的方法,但它们的有效性因您的用例而异,并且每种方法都可能带来一些不必要的后果,例如设置 Activity 的 launchModeAndroidManifest.xml 文件中的 singleInstance

关于android - 如果使用 FLAG_ACTIVITY_REORDER_TO_FRONT,后退按钮不会加载堆栈中的最后一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37385635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com