活动生命周期混乱

时间:2014-09-20 12:56:59

标签: android android-intent android-activity activity-lifecycle

我是Android开发的新手,请原谅我的无知。

我有两个活动,A + B.如果从A-> B开始,A保持不变并且不会被破坏。当我从B-> A(使用后退按钮)返回时,活动A被破坏并再次创建,然后活动B被破坏。

我一直在寻找一种方法来保留活动A,所以当我回到B-> A时,A就像它一样被保留。我能够通过设置活动A launchMode来实现这一目标,如android:launchMode="singleTop"

有人可以解释一下这个初始行为吗?或者至少指导我阅读一些材料?当我按回B时,为什么A会被摧毁?

如果我想以编程方式实现android:launchMode="singleTop"的效果,我应该抓住"返回"在B中调用并使用我自己的标志创建自己的Intent

将launchMode设置为singleTop是否达到我想要的正确方法?

2 个答案:

答案 0 :(得分:1)

When I go back from B->A (using the back button), activity A gets destroyed and created again.  

我认为你看待上述陈述的概念是错误的。

活动A永远不会被破坏,而是进入活动生命周期的onStop()状态,当用户按下后退按钮时,如果你知道活动生命周期,它就会恢复

enter image description here

当当前活动开始另一个活动时,新活动将被推到堆栈顶部并获得焦点。 之前的活动仍在堆叠中,但已停止。当活动停止时,系统将保留其用户界面的当前状态。当用户按下“返回”按钮时,当前活动将从堆栈顶部弹出(活动被销毁),先前的活动将恢复(其UI的先前状态将恢复)。

编辑:

activity A gets destroyed and created again  

在以下情况下可以这样做:

  • 如果您在开始新活动时没有明确关闭第一项活动。

  • 如果您覆盖第二个活动中的onBackPressed以启动第一个活动 例如:

    @Override public void onBackPressed() { startActivity(new Intent(this, FirstActivity.class)); }

答案 1 :(得分:1)

你有点困惑。您描述的情况与“向上”导航的行为相匹配。在你的帖子中,你描述了从B-> A使用“BACK”按钮(设备上的硬件按钮)。但根据您的描述,您必须谈论“向上”按钮(屏幕顶部操作栏中的软“&gt;”图标)。如果您希望UP导航使用活动A的现有实例(而不是创建新实例),则需要在清单中的活动A的launchMode="singleTop"定义中设置<activity>。 / p>

有关详细信息,请参阅documentation for UP navigation。以下是相关位的引用:

  

要在用户按下应用程序图标时向上导航,您可以使用   NavUtils类的静态方法navigateUpFromSameTask()。当你   调用此方法,它完成当前活动并启动(或   恢复)适当的父活动。如果是目标父母   活动在任务的后台堆栈中,它被提出来。方式   提出取决于父母活动是否能够   处理onNewIntent()电话:

     
      
  • 如果父活动具有启动模式<singleTop>,或者向上意图包含FLAG_ACTIVITY_CLEAR_TOP,则父活动为   带到堆栈的顶部,并通过它接收意图   onNewIntent()方法。
  •   
  • 如果父活动具有启动模式<standard>,并且向上意图不包含FLAG_ACTIVITY_CLEAR_TOP,则父活动   弹出堆栈,该活动的新实例是   在堆栈顶部创建以接收意图。
  •