我有四个活动- 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
Task 2 : B-C-D现在我再打电话给B,然后叫BackStack Task 1 : A
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
Task 2 : B-C-D现在我再打电话给B,然后叫BackStack Task 1 : A
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相同的行为
那么哪种情况是正确的呢?我搞错了,不然我就误会了。
发布于 2017-09-29 11:37:49
我复制了你所描述的行为。
第一种场景基本上没有文档化,因为singleTask Activity应该始终是任务的根。因为Android在决定如何在何处启动Activity时使用了Activity,所以singleTask Activity将被启动到现有的任务中,而不是作为根Activity启动。这使得这种行为与记录在案的行为不同。当您从D启动D时,安卓需要通过调用onNewIntent()将Intent交付给B,而C和D坐在B之上则无法做到这一点。于是安卓完成了C和D,然后在B上调用了onNewIntent()。
第二个场景显示您现在有2个任务,因为singleTask Activity作为根Activity被启动到一个新任务中。同样地,当D发布B时,安卓需要通过调用onNewIntent()将Intent交付给B,如果C和D遇到阻碍,这是无法做到的。因此,安卓完成了C和D,然后将Intent交付给B in onNewIntent()。
第三个场景展示了FLAG_ACTIVITY_NEW_TASK的使用。当A用FLAG_ACTIVITY_NEW_TASK启动B时,Android会寻找一个现有的任务,该任务将B作为根Activity。因为它找不到一个,所以它在一个新任务中以根B的形式启动Activity。当安卓( Intent )用FLAG_ACTIVITY_NEW_TASK启动B时,它会查找一个以B作为根Activity的任务,如果它找到了该任务,就会将该任务带到前台,但不会将FLAG_ACTIVITY_NEW_TASK交付给Activity。这只是一种将现有任务放到前台的方法,当它进入后台时,它就处于状态中。这就是你所看到的。这种行为也有文档化(排序),但是由于所有这些场景之间非常复杂的相互依赖关系,所有可能的情况都没有明确地记录下来。有时,您需要通过经验观察来发现这是如何工作的,而不是阅读文档。
谢谢你的挑战。
发布于 2022-07-15 06:03:54
作为上述答案的补充,现在我在API 29中使用像素2,场景1和场景2的结果保持不变,但是在场景3中,B的一个新实例将被添加到任务堆栈中,而不仅仅是将任务带到前台。
不幸的是,这种行为仍然没有得到很好的记录。
https://stackoverflow.com/questions/46427805
复制相似问题