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