当它应该仅在启动时运行时,按回运行onCreate

时间:2013-10-23 12:48:35

标签: android android-intent android-lifecycle

我有2个活动,ActivityA和ActivityB

ActivityA有一个带有以下文本的TextView:

<a href="com.myapp.mydata.user/23">John</a> is a great person.

当用户点击链接时,我会在清单上获取该事件并打开ActivityB。

我在ActivityB上显示了一些信息,当我点击android上的标准后退按钮时,ActivityA的onCreate方法再次被执行,当它显然不应该这样做因为我刚回去。

我有什么选择?

3 个答案:

答案 0 :(得分:1)

When a user clicks on the link, I get the event on the manifest and opens ActivityB.这意味着你将ActivityB放在堆栈顶部......这是预期的。您可以做的是在打开finish()之前在ActivityA上致电ActivityB。通过这种方式,您将从堆栈中删除ActivityA。当您从ActivityB返回时,该应用将显示ActivityA之前的内容 - 如果有任何内容。

在您的情况下,ActivityA似乎被Android系统销毁以回收资源(通常是内存)。或者,您可能已经Developer Options进行了检查,并且您已在其中Don't keep activities进行了检查。

编辑:由于对@merendica的正确性进行了以下合理和公正的评论,也是下选民: 在ActivityA onCreate()中,通过检查Bundle属性是否为空,您知道是否重新创建了活动:

if(savedInstance == null) {
// activity newly created
} else {
// activity re-created either because of screen rotation 
// or user returned at some point to this activity
}

因此,如果重新创建活动,请不要调用您当前正在使用的任何逻辑。

答案 1 :(得分:0)

这正是必须发生的事情。 Android由于某种原因(例如低ram)破坏了Activity,因此必须重新创建它。如果您不想丢失活动工具State Saving中的数据。你不能改变Android生命周期,反对它会导致灾难。

答案 2 :(得分:-1)

当你按回On First OnResume方法调用之后,Oncreate将调用肯定..但你甚至可以处理这种行为。