Android主要活动自动销毁(完成)

时间:2013-03-01 13:47:20

标签: android android-activity

在我的应用程序中有三个活动:A,B和C.活动A是主要活动。

当我使用Intent从A启动活动B时,A会自动销毁。但是,当我启动B时,我还没有完成A.然后,当我按下设备中的后退按钮时,A使用onCreate启动,因为我没有使用{{},所以我丢失了所有数据1}}回去。

从B打开C时会发生同样的情况。

Intent

发生了什么事?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

这是我的一个错误,因此活动会自动销毁。我检查了Setting=>Developer Option=>Don't Keep Activities下的选项。因为一旦用户离开它就会破坏每个活动。

enter image description here

通过取消选中此选项,我的应用正常运行。

答案 1 :(得分:2)

如果您使用“活动B”获得某种一次性结果,那么听起来您需要使用startActivityForResult构造。参见[文档](http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent,int))

然而,维护有关“活动A”的状态信息而不将其保留在任何想要将所有信息(用户已填写的字段等)捆绑到Intent的任何位置捆绑传递给'活动B'。此捆绑包将传递到“活动B”onCreate(以及其他一些生命周期点),您可以继续填充“活动B”中的任何相关信息,并在重新启动“活动A”之前将该信息写回到意向包中。当你完成'活动B'时,modd'ed捆绑。但这里有龙。这个特定的机制在我们的应用程序中使用,对后端堆栈有严格的(错误的?)控制。具体而言,我们的“活动A”具有android:noHistory="true"的特殊清单声明。这意味着我们还可以通过在每个活动中覆盖onBackPressed()并将同一个捆绑包发送到我们刚刚来自的活动的新实例来控制按下后退按钮时发生的情况。它看起来像是一个正常的后台堆栈,但由于我们想要记住用户输入而不在任何地方持有这些信息,因此它是一个可用的解决方案。

这允许向导之类的输入,向导输入的每个阶段都是它自己的活动,并且最后只保留有效且正确的信息。

另一种方法是在SharedPreferences区域临时存储“活动A”的数据,以便在重新启动活动A时,您可以在离开时拉出相应的位,重新组装“活动A”的原始状态。请放心,当Android想要杀死你的活动A时,你可以做的很少,但你可以通过这里概述的方法来适应它。

答案 2 :(得分:1)

也许不是你在破坏你的活动。

Activity Life cycle :(强调我的)

的页面
  

如果活动暂停或停止,系统可以放弃活动   从记忆中要么完成,要么简单地杀死它   过程即可。当它再次显示给用户时,它必须完全显示   重新启动并恢复到之前的状态。

明确表示系统可以终止你的活动过程。

有些可能是您的设备内存不足,或者您的活动内存耗尽,导致系统终止它。

修改

为了维护您的数据,即使它被销毁,也要在活动之间。一种方法是使用Application类,在Using the Android Application class to persist data上查看这个答案,也许这就是你要找的东西。