gpt4 book ai didi

android - 对 singleTop 模式感到困惑

转载 作者:行者123 更新时间:2023-11-29 00:16:43 25 4
gpt4 key购买 nike

我在 android 文档中读到 singleTop 模式是这样的:

If an instance of the activity already exists at the top of the current task, the system routes the intent to that instance through a call to its onNewIntent() method, rather than creating a new instance of the activity. The activity can be instantiated multiple times, each instance can belong to different tasks, and one task can have multiple instances (but only if the activity at the top of the back stack is not an existing instance of the activity).

但是,我的应用的行为有所不同。我的主要 Activity 具有 list 文件中定义的 singleTop 启动模式。这就是它表现异常的地方。

  1. 从启动器启动主要 Activity 。
  2. 从主 Activity 开始子 Activity 。
  3. 当用户按下后退按钮(或操作栏主页按钮)时,它会向主要 Activity 发送一些附加信息。这意味着需要更新主要 Activity (取决于子 Activity 中的用户操作。)
  4. 主要 Activity 以更新的显示方式显示。

-- 奇怪的部分是 --

  1. 在主要 Activity 中,按下后退按钮可再次返回主要 Activity 。
  2. 第二次按后退按钮会调出启动器屏幕,然后我的应用会进入后台。

在第 5 步,为什么它再次调出主要 Activity ?我认为 singleTop 会将主要 Activity 放在前面,这是任务中当前堆栈的顶部。但从 #5 和 #6 中的行为来看,它似乎正在创建两个主要 Activity 的实例。

是我的理解不正确还是发生了其他我还不清楚的事情。请帮助解释/澄清。谢谢。

我的子 Activity 已覆盖其 onBackPressed 方法。同样,主要 Activity onNewIntent() 会处理额外内容。

@Override
public void onBackPressed() {
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(MainActivity.UPDATE_ARG, true);
startActivity(intent);
super.onBackPressed();
}

注意:如果我使用 singleTask 模式,它的行为与我对 singleTop 的预期一致。但我在某处读到过要谨慎使用 singleTask 和 singleInstance。

最佳答案

来自发布的文档:

one task can have multiple instances (but only if the activity at the top of the back stack is not an existing instance of the activity).

来自您的代码:

When user presses back button (or actionbar home button), it sends intent to main activity with some extras. This means that main activity needs to be updated (depending on the user actions in sub activity.)

当用户按下后退按钮时,您的主要 Activity 不存在于当前任务的顶部,而您的子 Activity 位于顶部,因为它尚未销毁,因此它会创建另一个主要 Activity 并且不要使用现有 Activity ,因为主要 Activity 不是顶级的。从文档中看这个,注意 backstack 包含当前的前台 Activity :

enter image description here

关于android - 对 singleTop 模式感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153585/

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