【问题标题】:Pause activity and go back to previous activity暂停活动并返回上一个活动
【发布时间】:2013-05-09 16:01:13
【问题描述】:

我有两个活动。按下按钮时,活动 A 启动活动 B。活动 B 在创建时加载一些数据。当我按下返回按钮时,活动 B 正在被破坏,但我只想暂停它并返回活动 A。我试过了:

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

但它让我进入主屏幕,而不是活动 A。

【问题讨论】:

  • 在活动 B 中调用 finish()
  • @FoamyGuy 在活动 B 中调用 finish() 正是 BACK 按钮的默认行为。 ActiviyB 将被销毁。这不是 OP 想要做的。
  • 我已经添加了一个答案,但我认为你的设计有缺陷。如果 ActivityB 加载了一些数据并且您想保留这些数据,那么您应该将数据存储在某个静态变量中,或者您应该使用 Service 加载该数据,然后您的任何活动都可以访问该数据。试图“保留活动”,因为它已加载数据,这将使您的应用设计难以管理、维护和理解。

标签: android android-activity activity-lifecycle


【解决方案1】:

如果您只想将 ActivityA 放在前面,请执行以下操作:

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, ActivityA.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(intent);
}

这将重新排列活动堆栈,使 A 位于顶部(显示)而 B 位于其后面。现在,当用户在 ActivityA 中单击 BACK 时,默认行为将是完成 ActivityA 并返回到 ActivityB。

【讨论】:

  • 亲爱的大卫,这可能不起作用(请参阅stackoverflow.com/questions/11453724/…)。事实上,一个新的活动被创建并放入堆栈。
  • @Trinimon 链接的问题是指将另一个任务放在前面,而不是重新排序同一任务中的活动。这是两件完全不相关的事情。当您说实际上创建了一个新活动并将其放入堆栈时,您是否真的在 OP 的配置中尝试过这个?
  • 是的,我创建了一个带有两个活动的小型演示应用程序,比如说ABAFLAG_ACTIVITY_NEW_TASK 一起调用BBA 一起调用FLAG_ACTIVITY_REORDER_TO_FRONT。它创建了一个新活动并将其推送到堆栈顶部。所以这与我提到的帖子一致。可能只是缺少一些东西吗?
  • @Trinimon REORDER_TO_FRONT 仅适用于同一任务中的活动。如果您实际上已经在 新任务 中启动了 ActivityB,那么这将不起作用。但是,这不是标准行为。通常,应用程序将其所有活动保持在同一个任务中。您看到的是FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_REORDER_TO_FRONT 之间的冲突。 OP 没有说明有多个任务,因为标准行为是让 ActivityA 和 ActivityB 在同一个任务中,我假设他没有多个任务。
  • 好的,我明白了。最后它奏效了。同时我也用FLAG_ACTIVITY_BROUGHT_TO_FRONT做了一些实验,听起来很相似,但似乎是另一回事。所以我以前总是用错误的组合。仅使用标志“REORDER_TO_FRONT”来启动活动 B 它有效(活动 A 没有)。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 2011-05-01
  • 1970-01-01
相关资源
最近更新 更多