2013-04-05 102 views
0

我有MainActivity.java,我想从它打开Activity A如何在创建第一个实例后从一个活动移动到另一个活动?

假设我从MainActivity打开ActivityA,我会使用此代码:

Intent i = new Intent(this,A.class); 
startActivity(i); 

当我在活动A,我按后退按钮。后退按钮将完成活动A并返回主活动。所以如果我重新启动活动A,它将从头开始重新启动。这不是我想要的。我只想从活动A创建一个实例,所以如果我从A移动到MainActivity尽可能多的次数,我不想重新启动它将保持最后一个状态。

+0

只是想知道不应该将'A.class'作为第二个参数而不是'A.java'? – SudoRahul 2013-04-05 03:43:12

+0

你是对的,我很抱歉,我改正了它 – Alex 2013-04-05 03:43:50

+0

你可以直接调用finish()。 – Unknown 2013-04-05 03:58:31

回答

1

当MainActiivty开始另一项活动时,新活动即活动A被推到堆栈的顶部,并将焦点上一个活动保留在堆栈中,但是停止当活动停止时,系统保留其用户界面的当前状态。

当用户按下返回按钮,当前活动是从堆栈的顶部弹出(活性被破坏)和先前活动恢复(其UI的先前状态被恢复)。堆栈中的活动不会重新排列,只能从堆栈中推送并弹出 - 在当前活动启动时推送到堆栈,并在用户使用“后退”按钮离开时弹出。因此,后堆栈作为“后进先出”对象结构运行。

注意:多个任务可以一次在背景中进行。但是,如果用户同时运行多个后台任务,系统可能会开始销毁后台活动以恢复内存,从而导致活动状态丢失。

在活动A的MainActivity中,按下后退按钮,活动A将以栈形式堆叠并销毁。

再次从MainActivty导航到A,活动被重新创建,因为它被销毁。这是它的工作原理。

欲了解更多详情,请看以下链接中的后退堆栈。

http://developer.android.com/guide/components/tasks-and-back-stack.html

android:launchMode 

上的活动应该如何启动的指令。有四种模式与Intent对象中的活动标志(FLAG_ACTIVITY_ *常量)一起工作,以确定在调用活动来处理意图时应该发生什么。

它们是:

  1. 标准
  2. singleTop
  3. singleTask
  4. singleInstance

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

但是,一旦活动被破坏,并且您需要导航到该活动,则会重新创建该活动。

+0

感谢您的详细解释!所以你说我不能用'意图'来达到我想要的。我应该使用“Tab”吗? – Alex 2013-04-05 05:38:40

相关问题