Android中的活动

时间:2012-01-07 03:21:24

标签: java android android-intent android-activity

我有一个关于Android应用程序中的活动的相当简单的问题。我还是个新手。

在我目前的Android应用程序中,我有大约10个活动。如果其中一个活动已经远离活动堆栈,我想重新打开它,是否可以调用:

  

Intent iLogin = new Intent(this,Login.class);       
startActivity(iLogin);

如果它仍然有点令人困惑,我会举一个例子。应用程序随活动1一起启动。然后,用户打开活动2.稍后,他打开活动3以执行操作。执行操作后,我希望用户返回活动1.是否可以调用上面的代码?它是从堆栈中获取活动还是创建新活动?如果不是,我如何从堆栈中获取活动?

更新:我对回收活动感兴趣,而不是每次创建新活动。例如,并非所有活动都需要创建新活动。其中一些只显示数据,可以根据用户要求刷新。

4 个答案:

答案 0 :(得分:2)

简而言之:不,您的代码段会将Login的新实例推送到活动堆栈。请在developer.android.com上的Tasks and Back Stack文章中阅读有关活动堆栈行为的更多信息。

  

因为后堆栈中的活动永远不会重新排列,如果你的   应用程序允许用户从多个开始执行特定活动   一个活动,创建并弹出该活动的新实例   到堆栈(而不是带来任何以前的实例   活动到顶部)。因此,您的应用程序中的一个活动可能会   如图所示,多次实例化(甚至来自不同的任务)   在图3中。

图3:

Figure 3

Managing Tasks下,还有一个可能的解决方案。您可以向Intent添加flag,指定在堆栈上已存在活动时Android应执行的操作。我会说FLAG_ACTIVITY_REORDER_TO_FRONTFLAG_ACTIVITY_CLEAR_TOP可能是您正在寻找的,但肯定会浏览其他选项,因为可能有更适合您的需求。

或者,如果您的应用中的流量允许,您可以在用户离开时完成活动。例如,在您的示例中:如果用户从活动#2导航到活动#3,则完成#2。按#3中的后退按钮将导致显示活动#1,因为那将是堆栈顶部的活动。

答案 1 :(得分:1)

我相信您可能希望使用FLAG_ACTIVITY_REORDER_TO_FRONTaddFlags()方法尝试标记Intent

如果堆栈中已存在Activity并将其存在,则会将{{3}}置于堆栈顶部,如果不存在则创建一个新的。{/ p>

答案 2 :(得分:1)

  

可以调用上面的代码吗?它是否得到了活动   堆叠,还是创建一个新活动?如果不是,我该如何获得活动   从堆栈?

<强>答。如果您使用此代码,则会在堆栈上创建另一个ur 1st活动实例,而且不是没有。


确定。这是基于上面例子的答案:

我建议您使用startActivityForResult()来调用活动1中的活动2

这里,活动2将表现为子活动...你可以setResult并在第二个活动成功完成任务时调用finish() ...

但在finish()之前添加了一个类似的布尔值:

 i.putExtra("passed2nd", true);

这表明用户已经完成了第二次活动

现在,你应该在第一个活动中覆盖onActivityResult()

这里你可以查看请求代码并从第二个活动中检索布尔额外的内容。


现在,重要的部分: 取决于布尔值是否为真,你可以决定使用startActivityForResult()使用不同的请求代码调用第三个活动,

另外,在你的onActivityResult()中,你可以再次检查请求代码,并在活动3结束时按照你的意愿行事

所以现在当第3个活动成功结束时,控件将返回到第1个活动

这是一个example让你开始。

答案 3 :(得分:0)

我建议使用FLAG_ACTIVITY_CLEAR_TOP

Activity 1 -> Activity 2 -> Activity 3所以Activity 3之后你想回到Activity 1对吗?我假设您不希望Activity 2仍在运行,因此您应该使用FLAG_ACTIVITY_CLEAR_TOP以便中间的所有内容都将关闭