我有2个活动,ActivityA和ActivityB
ActivityA有一个带有以下文本的TextView:
<a href="com.myapp.mydata.user/23">John</a> is a great person.
当用户点击链接时,我会在清单上获取该事件并打开ActivityB。
我在ActivityB上显示了一些信息,当我点击android上的标准后退按钮时,ActivityA的onCreate方法再次被执行,当它显然不应该这样做因为我刚回去。
我有什么选择?
答案 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将调用肯定..但你甚至可以处理这种行为。