应该调用finish()吗?
我有一个活动,通过意图调用第二个活动。第二个Activity被调用后,我想完成第一个活动。因此,我在onStop()
方法如下代码:应该调用finish()吗?
@Override
public void onStop() {
super.onStop();
if (shouldBeClosed) {
finish();
}
}
的问题是,我的第一个活动是没有关闭。我不明白为什么?
也许我应该把这段代码放入onPause()
?
但据我了解,在这种情况下,当活动松散焦点(就像在对话后),我的活动可以关闭。
那么为什么会发生这种问题,我该如何纠正这种行为?
P.S.变量shouldBeClosed
为真。这不是重点。
编辑
这里是次活动的号召:
Intent intent = new Intent(this, AcSpContextAssign.class);
Bundle extras = new Bundle();
extras.putInt(Constants.KEY_FROM_ACTIVITY, Constants.FROM_AcSpNameCreate);
extras.putLong(Constants.KEY_SPID, spId);
intent.putExtras(extras);
startActivity(intent);
通常情况下,你应该调用finish()为你的第一个活动,你发送的意图之后。喜欢的东西:
...
startActivity(secondActivityIntent);
finish();
这将触发的onPause() - >的onStop() - >的onDestroy()链为你的第一个活动,这样你就可以进行正常的清理有
谢谢,它的工作原理。但是,我不明白一些事情:1.为什么我的onStop方法在此活动中未被调用? 2.你能否解释为什么在开始新的活动代码之后继续执行? – Yury 2012-07-25 19:24:15
我认为这是因为操作系统可以按照自己的计划自由销毁该活动。没有什么需要它在失去前景后立即销毁一项活动。尽管onPause()方法应该在丢失前景之后立即调用,并在onStop之后立即调用。 – Joel 2012-07-25 19:30:09
@Yury乔尔是对的。在我需要尽快销毁一项活动之前,我一直在处理同样的问题。但是,Android操作系统并不能保证在活动离开前景时立即调用onDestroy()。首先,操作系统会优先考虑您的第二项活动,以便初始化并转移到闲置状态。只有在此之后,您的第一个活动才会发生Destroy事件。 – 2012-07-25 20:08:32
我已经在得到完成活动的习惯我在创建下一个活动后不再需要。我会认为使用onPause()或onStop()会做到这一点没有问题。你怎么知道它没有关闭?它活多久? – Joel 2012-07-25 18:55:45
如果我按下后退按钮或完成第二个活动,我会看到第一个活动。 – Yury 2012-07-25 18:57:05
表示同意,你怎么知道它没有完成?你可以通过在'onCreate()'中放置一个断点来确定。在'onStop()'代码运行后,你应该在下次调用activity时看到'onCreate()'。 – 2012-07-25 18:58:11