我有一个Android活动,我们称之为 A ,它有一个按钮和另一个活动 B 。当用户点击Activity A 中的按钮时,我想完成 A (让onStop
和onDestroy
完成运行)然后启动B的实例。当我在按钮单击侦听器中调用finish()
和startActivity()
时, B 的实例在的旧实例之前启动结束。有人可以帮助我找到一种方法来做我正在寻找的东西吗?
答案 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 State的Activity doc部分。
当调用活动的onPause()方法时,它应该提交给支持内容提供者或文件用户所做的任何更改。 这可确保任何其他即将运行的活动都能看到这些更改。您可能希望在活动生命周期的关键时刻更积极地提交数据:例如,在开始新活动之前活动,在完成您自己的活动之前,当用户在输入字段等之间切换时
虽然我不确定您的清理是否适合用户更改,但上面的粗体句子表示onPause
将在创建下一个Activity
之前完成。当然,这可能意味着您必须将某些设置移至onResume
...
或者,您可以将所有清理代码移动到某个方法,让我们只需将其称为cleanup
,然后在开始活动B之前调用它。您必须为{{1}添加适当的防护当然也要清理。
答案 3 :(得分:0)
finish()
方法。cleanUp()
方法。boolean isClean=false
cleanUp()
中写下您的清理代码。cleanUp()
finish()
isCleaned
或finish()
中的cleanUp()
是否为真,然后忽略干净B
之前,请致电cleanUp()
并设置isCleand=true
B
后,请致电finish()
答案 4 :(得分:-1)