Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 具有singleTask启动模式的活动及其在后台堆栈中的位置大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在官方在线 Android guide on tasks and back stack中,有一条我发现自相矛盾的信息.如果有人能帮助我解决这个问题,我将不胜感激.

首先,有以下声明:

然后描述了singleTask启动模式,有以下声明:

好吧,如果我理解正确的话,singleTask活动只能是他们任务的根源,因为它们是以这种方式创建的,并且活动永远不会在后台堆栈中交换位置.但是这样的活动如何在接收对onNewIntent()方法调用时做出反应呢?

在该页面上有关于此事的另一个评论

因此,该指南指出,调用singleTask活动会以某种方式使其前进.但是,如果这项活动不是最重要的,那怎么可能呢?活动是否已恢复,或者只是在没有向用户显示的情况下接收对其onNewIntent()方法调用?我真的不明白.

PS:一年多前已经问过几乎相同的question,但没有给出正确答案.因此,然从技术上讲,我的问题是重复的,但我觉得有必要重新提出它,因为它确实值得一个明确而明确的答案.

解决方法

我会尽力回答你的问题.

首先,

这实际上是错误的.通常,堆栈中的活动永远不会重新排列,但您可以使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT将现有活动从堆栈中的其他位置带到前面.例如,您的活动堆栈如下所示:A-> B-> C-> D其中a是根活动(位于堆栈底部),D是前景中最顶层的活动(是示出).如果D现在这样做:

Intent intent = new Intent(this,B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

这会将活动B的现有实例移动到任务的前面,这样它就不会显示在屏幕上.活动堆栈现在看起来像这样:A-> C-> D-> B.

接下来你问这个:

好吧,并且活动永远不会在后台堆栈中交换位置.但是这样的活动如何在接收对onNewIntent()方法调用时做出反应呢?

通常,singleTask活动是其任务的根.如果已经有一个现有任务激活了singleTask活动,并且您使用startActivity()启动了这样的活动,那么该任务将被提前(以便在屏幕上显示)并且onNewIntent()将在该活动的现有实例.但是,如果singleTask活动已在其任务中启动了其他活动,则所有其他活动都将完成(即:任务被剥离回其根Activity)BEFORE onNewIntent()将在现有的singleTask活动实例上调用.

有些情况下,singleTask活动不是其任务的根,然后所有的投注都是关闭的(即:行为不是记录的).如果singleTask活动与应用程序中已在任务中处于活动状态的其他活动具有相同的taskAffinity,则会发生这种情况.在这种情况下,Android会忽略singleTask启动模式,并将活动视为具有标准启动模式.

大佬总结

以上是大佬教程为你收集整理的android – 具有singleTask启动模式的活动及其在后台堆栈中的位置全部内容,希望文章能够帮你解决android – 具有singleTask启动模式的活动及其在后台堆栈中的位置所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。