想要开始一项新活动,但让原始活动先完成

时间:2012-01-24 21:09:23

标签: android android-intent

我有一个Android活动,我们称之为 A ,它有一个按钮和另一个活动 B 。当用户点击Activity A 中的按钮时,我想完成 A (让onStoponDestroy完成运行)然后启动B的实例。当我在按钮单击侦听器中调用finish()startActivity()时, B 的实例在的旧实例之前启动结束。有人可以帮助我找到一种方法来做我正在寻找的东西吗?

5 个答案:

答案 0 :(得分:2)

您正在寻找的是不可能的,实际上是违反了Android的活动生命周期实施。

<强>校正 您可以在清单中使用android:noHistory="true"标记,但是对于您尝试执行的操作,这似乎是错误的(阅读编辑)...与活动堆栈混淆会导致非直观的应用程序!

Android操作系统不允许您控制活动何时从内存中删除(或被杀死),因此所有这些花哨的“任务杀手”如此受欢迎(不要使用它们,它们只会让事情变得更糟)。 当您的活动onStop()被调用时,活动会完全停止,它只会挂在您的记忆中,但这很好......

如果要重置activity A的状态,或在退出activity B时关闭应用,只需在onResume()onStop()中创建一组规则,可以通过在这些功能中创建一组规则来完成您想要的任何事情。

例如:在activity A中有一个布尔值,在调用true之前转为activity B,如果此布尔值为{{activity A,则在true上调用finish() 1}}

我建议您查看Android's Activity lifecycle diagram,并确保您所做的一切都遵循最佳做法。

修改

我看到了你的评论,看起来你正在尝试创建已经在你内存中的东西,不要重新创建它们,这是浪费CPU时间,内存和电池。 相反,创建一个带有单例的静态类,它将保存所有共享数据!

答案 1 :(得分:0)

我相信你在寻找     的onPause()

这是将活动发送到后台时调用的内容。你可以在那里做任何你需要的清理工作。只有在用户退出程序(或启动另一个程序)时才会调用onStop

答案 2 :(得分:0)

onPause是一个更好的清理方法。请参阅Saving Persistent StateActivity doc部分。

  

当调用活动的onPause()方法时,它应该提交给支持内容提供者或文件用户所做的任何更改。 这可确保任何其他即将运行的活动都能看到这些更改。您可能希望在活动生命周期的关键时刻更积极地提交数据:例如,在开始新活动之前活动,在完成您自己的活动之前,当用户在输入字段等之间切换时

虽然我不确定您的清理是否适合用户更改,但上面的粗体句子表示onPause将在创建下一个Activity之前完成。当然,这可能意味着您必须将某些设置移至onResume ...

或者,您可以将所有清理代码移动到某个方法,让我们只需将其称为cleanup,然后在开始活动B之前调用它。您必须为{{1}添加适当的防护当然也要清理。

答案 3 :(得分:0)

  • 覆盖finish()方法。
  • 实施cleanUp()方法。
  • 在活动中创建boolean isClean=false
  • cleanUp()中写下您的清理代码。
  • cleanUp()
  • 中致电finish()
  • 检查isCleanedfinish()中的cleanUp()是否为真,然后忽略干净
  • 现在开始B之前,请致电cleanUp()并设置isCleand=true
  • 致电B后,请致电finish()

答案 4 :(得分:-1)

  1. 开始活动A
  2. 来自a startService(c)并完成A
  3. 从服务内部开始,活动B