应该调用finish()吗?

应该调用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); 
+0

我已经在得到完成活动的习惯我在创建下一个活动后不再需要。我会认为使用onPause()或onStop()会做到这一点没有问题。你怎么知道它没有关闭?它活多久? – Joel 2012-07-25 18:55:45

+0

如果我按下后退按钮或完成第二个活动,我会看到第一个活动。 – Yury 2012-07-25 18:57:05

+0

表示同意,你怎么知道它没有完成?你可以通过在'onCreate()'中放置一个断点来确定。在'onStop()'代码运行后,你应该在下次调用activity时看到'onCreate()'。 – 2012-07-25 18:58:11

通常情况下,你应该调用finish()为你的第一个活动,你发送的意图之后。喜欢的东西:

... 
startActivity(secondActivityIntent); 
finish(); 

这将触发的onPause() - >的onStop() - >的onDestroy()链为你的第一个活动,这样你就可以进行正常的清理有

+0

谢谢,它的工作原理。但是,我不明白一些事情:1.为什么我的onStop方法在此活动中未被调用? 2.你能否解释为什么在开始新的活动代码之后继续执行? – Yury 2012-07-25 19:24:15

+0

我认为这是因为操作系统可以按照自己的计划*销毁该活动。没有什么需要它在失去前景后立即销毁一项活动。尽管onPause()方法应该在丢失前景之后立即调用,并在onStop之后立即调用。 – Joel 2012-07-25 19:30:09

+0

@Yury乔尔是对的。在我需要尽快销毁一项活动之前,我一直在处理同样的问题。但是,Android操作系统并不能保证在活动离开前景时立即调用onDestroy()。首先,操作系统会优先考虑您的第二项活动,以便初始化并转移到闲置状态。只有在此之后,您的第一个活动才会发生Destroy事件。 – 2012-07-25 20:08:32