我有四项活动 - A,B,C,D
我以这种方式称呼这四项活动 - > A-B-C-d-B。 (指定方式)
我有三种情况。
第一名: - 我只在B活动中定义android:launchMode="singleTask"
。我以上述指定的方式通过Intent
调用所有活动。
现在首先致电A-B-C-D,BackStack Task 1 : A-B-C-D,
现在我再次呼叫B,然后BackStack Task 1 : A-B
。这里的C和D活动被销毁。
第二名: - 我正在定义android:launchMode="singleTask"
& B活动中的android:taskAffinity=""
。我以上述指定的方式通过Intent
调用所有活动。
现在首先致电A-B-C-D,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名: - 我正在定义Intent.FLAG_ACTIVITY_NEW_TASK
& B活动中的android:taskAffinity=""
。我以上述指定的方式通过Intent
调用所有活动。
现在首先致电A-B-C-D,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
那么哪种情况正确?我做对了,或者我误解了什么。
答案 0 :(得分:4)
我已经按照你所描述的那样重现了这种行为。
第一个场景基本上没有记录,因为singleTask
Activity
应始终是任务的根。由于Android在确定taskAffinity
的启动方式和位置时使用Activity
,因此您的singleTask
Activity
将被启动到现有任务中,但不会作为根Activity
启动}。这使得行为与记录的行为不同。当您从B
启动D
时,Android需要在Intent
的调用中将B
传递给onNewIntent()
,这与C
无关}和D
位于B
之上。因此Android完成C
和D
,然后在onNewIntent()
上调用B
。
第二个方案显示您现在有2个任务,因为singleTask
Activity
作为根Activity
启动到新任务中。同样,当D
启动B
时,Android需要通过调用Intent
将B
发送到onNewIntent()
,如果C
,则无法执行此操作D
挡路了。因此,Android完成C
和D
,然后将Intent
传递到B
中的onNewIntent()
。
第三种情况显示FLAG_ACTIVITY_NEW_TASK
的使用。当A
使用B
启动FLAG_ACTIVITY_NEW_TASK
时,Android会查找以B
为根Activity
的现有任务。由于它没有找到,因此它会在新任务中以B
启动Activity
。当D
使用B
启动FLAG_ACTIVITY_NEW_TASK
时,Android会查找以B
为根Activity
的任务,如果找到一个,则会带来该任务到前景但未将Intent
传递给onNewIntent()
。这只是一种将现有任务置于其前进到后台状态的前台的方法。这就是你所看到的。此行为也被记录(排序),但由于所有这些方案之间的相互依赖性非常复杂,因此未明确记录所有可能的情况。有时你需要通过经验观察而不是阅读文档来发现它是如何工作的。
感谢您的挑战。