首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么行为不同?- android:launchMode="singleTask“,”android:taskAffinity=“和Intent.FLAG_ACTIVITY_NEW_TASK

为什么行为不同?- android:launchMode="singleTask“,”android:taskAffinity=“和Intent.FLAG_ACTIVITY_NEW_TASK
EN

Stack Overflow用户
提问于 2017-09-26 13:23:57
回答 2查看 1.1K关注 0票数 6

我有四个活动- A,B,C,D

我称之为这四种活动的方式->A-B-C B。(指定方式)

我有三种情况。

1 :-我只在B活动中定义android:launchMode="singleTask"。我正在以上述方式通过Intent调用所有活动。

现在先呼叫A,BackStack Task 1 : A-B-C-D,

现在我又打电话给B,然后叫BackStack Task 1 : A-B。在这里,C和D活动被摧毁。

2 :-,我在B活动中定义android:launchMode="singleTask" & android:taskAffinity=""。我正在以上述方式通过Intent调用所有活动。

现在先呼叫A,BackStack Task 1 : A

代码语言:javascript
复制
                                  Task 2 : B-C-D

现在我再打电话给B,然后叫BackStack Task 1 : A

代码语言:javascript
复制
                                Task 2 : B ,Here C and D Activities are destroyed.

3 :-,我在B活动中定义Intent.FLAG_ACTIVITY_NEW_TASK & android:taskAffinity=""。我正在以上述方式通过Intent调用所有活动。

现在先呼叫A,BackStack Task 1 : A

代码语言:javascript
复制
                                  Task 2 : B-C-D

现在我再打电话给B,然后叫BackStack Task 1 : A

代码语言:javascript
复制
                                Task 2 : B-C-D , Here **Can't call B again**

在这里,它说FLAG_ACTIVITY_NEW_TASK产生与"singleTask“- https://developer.android.com/guide/components/activities/tasks-and-back-stack.html相同的行为

那么哪种情况是正确的呢?我搞错了,不然我就误会了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-29 11:37:49

我复制了你所描述的行为。

第一种场景基本上没有文档化,因为singleTask Activity应该始终是任务的根。因为Android在决定如何在何处启动Activity时使用了Activity,所以singleTask Activity将被启动到现有的任务中,而不是作为根Activity启动。这使得这种行为与记录在案的行为不同。当您从D启动D时,安卓需要通过调用onNewIntent()Intent交付给B,而CD坐在B之上则无法做到这一点。于是安卓完成了CD,然后在B上调用了onNewIntent()

第二个场景显示您现在有2个任务,因为singleTask Activity作为根Activity被启动到一个新任务中。同样地,当D发布B时,安卓需要通过调用onNewIntent()Intent交付给B,如果CD遇到阻碍,这是无法做到的。因此,安卓完成了CD,然后将Intent交付给B in onNewIntent()

第三个场景展示了FLAG_ACTIVITY_NEW_TASK的使用。当AFLAG_ACTIVITY_NEW_TASK启动B时,Android会寻找一个现有的任务,该任务将B作为根Activity。因为它找不到一个,所以它在一个新任务中以根B的形式启动Activity。当安卓( Intent )用FLAG_ACTIVITY_NEW_TASK启动B时,它会查找一个以B作为根Activity的任务,如果它找到了该任务,就会将该任务带到前台,但不会将FLAG_ACTIVITY_NEW_TASK交付给Activity。这只是一种将现有任务放到前台的方法,当它进入后台时,它就处于状态中。这就是你所看到的。这种行为也有文档化(排序),但是由于所有这些场景之间非常复杂的相互依赖关系,所有可能的情况都没有明确地记录下来。有时,您需要通过经验观察来发现这是如何工作的,而不是阅读文档。

谢谢你的挑战。

票数 8
EN

Stack Overflow用户

发布于 2022-07-15 06:03:54

作为上述答案的补充,现在我在API 29中使用像素2,场景1和场景2的结果保持不变,但是在场景3中,B的一个新实例将被添加到任务堆栈中,而不仅仅是将任务带到前台。

不幸的是,这种行为仍然没有得到很好的记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46427805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档