繁体   English   中英

Android中的活动

[英]Activities in Android

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

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

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

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

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

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

由于后备堆栈中的活动永远不会重新排列,如果您的应用程序允许用户从多个活动启动特定活动,则会创建该活动的新实例并将其弹出到堆栈中(而不是引入任何先前的活动实例)到顶部)。 因此,应用程序中的一个活动可能会多次实例化(甚至来自不同的任务),如图3所示。

图3:

图3

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

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

我相信你可能想尝试的标志FLAG_ACTIVITY_REORDER_TO_FRONT使用addFlags()的方法Intent

如果它已经存在于堆栈中,则会将Activity置于堆栈顶部,如果不存在则创建一个新的。

可以调用上面的代码吗? 它是从堆栈中获取活动还是创建新活动? 如果不是,我怎样才能从堆栈中获取活动?

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


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

我建议你使用startActivityForResult()从Activity 1调用Activity 2

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

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

 i.putExtra("passed2nd", true);

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

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

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


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

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

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

这是一个让你开始的例子

我建议使用FLAG_ACTIVITY_CLEAR_TOP

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM