2013-03-01 64 views
0

在我的应用程序中有三个活动:A,B和C.活动A是主要活动。Android主要活动自动销毁(完成)

当我从A使用Intent开始活动B时,A会自动销毁。但是,当我启动B时,我没有完成A的操作。然后,当我按下设备中的后退按钮时,A使用onCreate启动,由于我没有使用Intent返回,因此我丢失了所有数据。从B.

button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       startActivity(new Intent(ActivityA.this, 
         ActivityB.class)); 
      } 
     }); 

空间C时,这是怎么回事

同样的情况?我该如何解决?

+0

我们有代码吗? – 2013-03-01 13:50:57

+0

你可能在开始你的'Activity B'后给了'finish()'。 – SudoRahul 2013-03-01 13:51:33

+0

是的,我更新我的问题 – 2013-03-01 13:52:35

回答

1

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

enter image description here

通过未选中此选项我的应用程序工作正常。

1

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

大约从页面Activity Life cycle:(重点煤矿)

如果活动被暂停或停止,系统可以从内存既可以丢弃活动 要求它完成,或干脆杀死它 过程。当它再次显示给用户时,它必须完全重新启动并恢复到其以前的状态 。

有明确说系统可以杀死你的活动过程。

一些可能性是你的设备内存不足,或者你的活动是内存饥饿,使系统杀死它。

编辑

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

+0

是否有任何解决方案来避免这种情况或停止活动摧毁? – 2013-03-01 14:03:04

+0

现在我想不出一个,看看我的编辑 – RMalke 2013-03-01 14:07:23

2

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

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

这允许向导一样的向导输入每个阶段是它自己的活动,只有经过验证和正确的信息被保留在最后。

另一种方法是将'活动A'的数据临时存储到SharedPreferences区域,以便在重新启动活动A时,您可以在离开时重新组合'活动A'的原始状态。放心吧,当Android想要杀死你的Activity A时,你可以做的事情很少,但是你可以通过这里概述的方法来适应它非常合理的杀戮。