0

我有 2 个活动,ActivityA 和 ActivityB

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

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

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

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

我有哪些选择?

4

3 回答 3

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
}

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

于 2013-10-23T12:55:47.443 回答
0

这正是必须发生的事情。Android 出于某种原因(例如低内存)破坏了 Activity,因此必须重新创建它。如果您不想在活动中丢失数据,请执行State Saving。你无法改变 Android 的生命周期,而违背它会导致灾难。

于 2013-10-23T13:03:52.240 回答
-1

当您按下返回第一个 OnResume 方法时,然后 Oncreate 肯定会调用..但是您甚至可以处理该行为。

于 2013-10-23T12:54:27.883 回答