简单地说,我使用Splash,Home,Child1和Child2编写了一个应用程序,其中包含以下流程:Splash - >首页 - > Child1 - > CHILD2。我们可以从Child2返回到Child1,从Child1返回到Home,然后从Home返回到退出app。
听起来很简单。我可以正确浏览这些屏幕。
通过OTA安装应用程序时出现问题。输入Splash后 - >首页 - > Child1 - > CHILD2。保持Child2,我按HOME按钮以最小化应用程序,并通过选择应用程序图标重新进入应用程序。但是当重新进入app时,它不会在Child2上恢复,而是从Splash开始 - >家。我无法理解这里发生了什么。它应该在Child2上恢复。
更令人惊讶的是,在主屏幕上,当我按BACK按钮存在app时,现在Child2恢复(o_O)。从Child2开始,现在我可以回到Child1,回到Home,再回到现有应用程序。
当我通过OTA安装应用程序时会发生所有这些问题,但是当我通过电缆安装时应用程序正常工作。
谁能告诉我在我的情况下会发生什么?任何帮助表示赞赏
非常感谢。
P / S:我在Nexus 1(Android 2.2)和Nexus S(Android 2.3.x)上测试时遇到此错误编辑:偶CNN app for Android仍有此问题......是否属于操作系统?
答案 0 :(得分:0)
看一下你的评论,一旦你开始一个新的活动,就会终止你的活动..
E.g。如果你这样做:
startActivity(intent);
finish(); // THIS WILL KILL THE ACTIVITY -> MAKING IT UNREACHABLE
启动新活动的活动正在被杀死,使用后退按钮无法访问。
删除
finish(); // REMOVE THIS TO KEEP IT ON THE ACTIVITY STACK
调用startActivity(intent)后,所有活动都应保留在内存中。因此,当你回去时,它们将是可达的。注意:对于Splash,你应该确实调用finish(),因为你不想在成功启动后回到Splash活动!
答案 1 :(得分:0)
我想这与task affinity有关。而且它不只是CNN应用程序,所有应用程序的行为都是这样的,因为一些开发人员(像我一样!)不理解任务概念的工作原理。我不会骗你,即使我一直不理解这一点。
我相信这是因为,当您从市场推出应用时,您的应用会成为市场任务的一部分。因此,您有一个“属于”市场任务的实例。您可以正常导航。当你按Home键时会发生所有问题......
如果您从启动器启动活动,则启动应用程序的新任务,为您提供应用程序的2个“实例”,一个属于上一个市场任务,另一个属于你自己的应用程序(你自己的任务的根源)。
在这项新任务中,您可以导航回来,最终您将到达上一个任务,该任务包含您应用的另一个实例。您将到达离开的位置(考虑活动的常规启动模式)。有时,这很奇怪,因为我们通常认为一个应用程序只有一个实例,当它不是它的工作方式时,也不是它应该如何工作。我在Windows中打开了两次打开两个应用程序的情况,我比较松散地进行了比较。在Android中,这个类比是类似的(至少对我而言)。
当您从其他应用启动应用时,当任务概念感觉自然时,这一切都很好。
但是,在这种情况下它会变得奇怪,因为当我们从Market启动活动时,我们希望实例与Launcher中的实例相同(从那里启动时)。我们自然不希望用于下载应用程序的Market会拥有我们安装的应用程序,并且我们(显然)想要单独使用Market应用程序(我认为市场不应该拥有任务)使用“打开”按钮时。)
要解决这个问题,我相信你可以摆弄allowTaskReparenting
。但是,如果它真的导致了这个问题,我不推荐它,因为这可能会破坏任务系统的其他合法用途。
最后,这就是我 相信 任务的工作方式,这就是我对此问题来源的猜测。我可能是错的,所以请原谅我,如果这个答案以后变得无用(如果你找到另一个解决这个问题的原因)。
祝你好运!