2012-12-17 33 views
0

我阅读了关于任务和回栈的内容,但仍然没有混淆。我只是在尝试不同的事情,并且讨论了一个案例。举个例子: 我们有两个应用程序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,现在从发射按Home键,并再次A2图标,我达到了A2_秒,但我预计会达到A2_first。

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

回答

2

应用程序如果启动从主屏幕中的应用程序,它并不一定带你到该应用程序的第一个活动的更多细节。如果应用程序已经运行,它只会返回到您在应用程序中停止的位置。这就是你所看到的。另外,你使用“singleTask”启动模式使事情变得更加复杂。一般来说,您不应该使用“singleTask”或“singleInstance”启动模式。这些是非常特殊的启动模式,主要用于创建HOME屏幕替换。无论如何,如果您需要使用其中一种特殊启动模式,则需要确保针对使用这些启动模式的活动有不同的应用程序图标。如果你有不同的A2_first和A2_second应用程序图标,那么它会更明显。

+0

约定大卫,我不应该使用单一的任务,但我不使用这个来创建任何应用程序,我试图做深入的潜水。 我仍然有疑问,因为当我点击图标时,我看到整个任务进入前台(并且你看到你离开的位置),但在这种情况下,A2_first和A2_second应该属于不同的任务,如“http://developer.android .com/guide/components/tasks-and-back-stack.html“: ”SingleTask“系统创建一个新任务并在新任务的根目录下实例化活动。 所以如果我按A2的图标任务相关的A2_first应该在前台。 – user1875798

+1

不是。它比这更复杂。还有“taskAffinity”的概念。由于A2_first和A2_second具有相同的“taskAffinity”,所以当您按下A2图标时,它会将任何任务带到具有此taskAffinity的前景。如果你真的想要单独的任务,那么你需要使用单独的图标,并为A2_second设置“android:taskAffinity =”“'。 –

+0

谢谢loooooooooooooooot ...明白了你的观点。 – user1875798

0

如果我正确理解你,你不退出应用程序,但只是按主页按钮。如果应用程序状态未被更改,它将从缓存中返回,并且在按回家之前打开的同一活动已打开。

尝试How to finish() an Activity when Home button pressed关于如何完成的Home键按下

0

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

在Android中没有标准的“家”命令返回,对不起。例如,在我的手机上,“主页”将返回到开始屏幕,并将所有活动置于后台。显然,你不是这个意思。

我这还不够,放在这里的代码,包含活动调用和处理退货。很难说不知道的是,你的呼叫按钮和返回过程究竟做了什么。

在理解任务和后台之前,我建议先理解开始/返回的活动。

0

当您按下home键,A2_second只是进入后台。它并没有结束(完成)。所以当你点击A2图标时,系统将从A2中查找上次访问的活动(如果有的话)。由于A2_second可用且处于后台状态 - 系统将简单地将其称为前台。

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

但是,如果按“返回”,A2_second将结束。在此之后,如果您点击A2图标,则A2_first将启动。

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