【发布时间】:2015-07-22 22:22:15
【问题描述】:
在官方在线Androidguide on tasks and back stack中,有一条我觉得自相矛盾的信息。如果有人能帮我弄清楚,我将不胜感激。
首先,有以下声明:
堆栈中的 Activity 永远不会重新排列,只会从堆栈中压入和弹出 - 当由当前 Activity 启动时压入堆栈,并在用户使用后退按钮离开时弹出。
然后描述singleTask启动模式,有如下语句:
系统创建一个新任务并在新任务的根目录下实例化活动。但是,如果 Activity 的实例已经存在于单独的任务中,系统会通过调用其 onNewIntent() 方法将 Intent 路由到现有实例,而不是创建新实例。
好吧,如果我理解正确的话,singleTask 活动只能是它们的任务的根,因为它们是这样创建的,并且活动从不交换后堆栈中的位置。但是这样的活动在收到对其 onNewIntent() 方法的调用时会如何反应?
那个页面上还有一个关于这个问题的评论:
作为另一个示例,Android 浏览器应用程序声明 Web 浏览器活动应始终在其自己的任务中打开 - 通过在元素中指定 singleTask 启动模式。这意味着如果您的应用程序发出打开 Android 浏览器的意图,它的活动不会与您的应用程序放在同一任务中。相反,要么为浏览器启动一个新任务,要么,如果浏览器已经在后台运行了一个任务,则该任务被提出来处理新的意图。
因此,指南指出调用 singleTask 活动会以某种方式将其向前推进。但是,如果该活动不在其任务之上,这怎么可能是真的呢?活动是否恢复,或者它只是接收到对其 onNewIntent() 方法的调用而不向用户显示?我真的不明白。
PS:一个几乎相同的question 已经在一年多前被问过,但没有给出正确的答案。因此,虽然从技术上讲,我的问题是重复的,但我有重新提出的冲动,因为它确实值得一个清晰明确的答案。
【问题讨论】:
标签: android android-intent android-activity back-stack launchmode