难以理解回堆栈和任务

时间:2012-12-17 09:42:20

标签: android task back-stack

我阅读了有关任务和后台堆栈(http://developer.android.com/guide/components/tasks-and-back-stack.html),但仍然没有什么混淆。我只是在尝试不同的事情并且在一个案例上喋喋不休。让我们举一个例子: 我们有两个应用程序A1和A2。 A1有一个活动,例如A1_first(也是主要活动),A2有两个活动A2_first(主要活动)和A2_second。 A2_second是singleTask活动。按下按钮时A1_frist调用A2_second,按下按钮时A2_first调用A2_second。

如果我启动A2,我可以看到A2_first屏幕,按下按钮后我转到A2_second(如预期的那样)但是假设我首先启动A1并且按下按钮后按A2_second,现在按下主页按钮并再次从启动器发出A2图标,我到达到A2_second,但我预计会达到A2_first。

我不明白我错过了什么。有人可以解释                                         按A2 A1_first -----> A2_second ---->主页-----------------> A2_second(为什么不A2_first?A2_first是A2的主要活动)。

4 个答案:

答案 0 :(得分:2)

如果从HOME屏幕启动应用程序,则不一定会将您带到该应用程序的第一个活动。如果应用程序已在运行,它只会将您返回到您在应用程序中停止的位置。这就是你所看到的。此外,通过使用“singleTask”启动模式,您已经使事情变得更加复杂。通常,您不应该使用“singleTask”或“singleInstance”启动模式。这些是非常特殊的启动模式,主要用于创建HOME屏幕替换。在任何情况下,如果您需要使用其中一种特殊启动模式,则需要确保为使用这些启动模式的活动提供不同的应用程序图标。如果你有A2_first和A2_second的不同应用程序图标,那么发生的事情会更加明显。

答案 1 :(得分:0)

如果我理解正确您没有退出应用程序,只需按主页按钮即可。如果应用程序状态未更改,它将从缓存中返回,并在您按下之前打开与之相同的活动。

请尝试How to finish() an Activity when Home button pressed了解有关如何在首页按钮上完成应用的详细信息

答案 2 :(得分:0)

如果从活动A开始(成功)活动B,然后按“返回”,您将返回活动A.独立于这些活动属于哪些应用程序。

Android中没有标准的“home”命令可以返回,抱歉。例如,在我的手机上,“home”将返回到开始屏幕,所有活动都会显示在后台。显然,你不是故意的。

我这还不够,在这里放置代码,包含活动调用和处理返回。很难说出一些不知道的事情,你的呼叫按钮和返回过程到底是做什么的。

在了解任务和背包之前,我建议先了解开始/返回的活动。

答案 3 :(得分:0)

当您按下主页按钮时,A2_second将进入后台。它没有结束(完成)。因此,当您单击A2图标时,系统将从A2(如果有)查找上次访问的活动。由于A2_second可用且处于后台状态 - 系统将简单地将其调回前台。

这就是android如何建立多任务处理。整个应用程序(所有活动)永远不会立即加载到内存中。相反,应用程序被分解为可以在需要时加载的功能块(活动)。因此,当您从另一个应用程序调用活动(从A1_first调用A2_second),然后按home时,此活动(A2_second)将转到后台。当您单击A2图标时,由于系统知道A2_second在后台,因此用户已经访问了最后一个并且可能是他/她正在寻找的部分,因此它被带到前台。

如果按“后退”,A2_second将完成。在此之后,如果单击A2图标,则将启动A2_first。

这样,来自各种应用程序的不同部分(活动)可以在内存中共存,并为用户提供无缝体验,同时保持系统快速和快速。