zep*_*hyr 5 android launchmode back-stack
我有四个活动-A,B,C,D
我以-> ABCDB的方式称呼这四个活动。(指定方式)
我有三种情况。
第一:-我android:launchMode="singleTask"仅在B活动中定义。我通过Intent上述指定方式调用所有活动。
现在首先呼叫ABCD, BackStack Task 1 : A-B-C-D,
现在,我再次呼叫B,然后 BackStack Task 1 : A-B。这里的C和D活动被销毁。
第二:-我正在定义android:launchMode="singleTask"&android:taskAffinity=""在B活动中。我通过Intent上述指定方式调用所有活动。
现在首先呼叫ABCD, BackStack Task 1 : A
Task 2 : B-C-D
Run Code Online (Sandbox Code Playgroud)
现在我再次打电话给B,然后 BackStack Task 1 : A
Task 2 : B ,Here C and D Activities are destroyed.
Run Code Online (Sandbox Code Playgroud)
第三:-我正在定义Intent.FLAG_ACTIVITY_NEW_TASK&android:taskAffinity=""在B活动中。我通过Intent上述指定方式调用所有活动。
现在首先呼叫ABCD, BackStack Task 1 : A
Task 2 : B-C-D
Run Code Online (Sandbox Code Playgroud)
现在我再次打电话给B,然后 BackStack Task 1 : A
Task 2 : B-C-D , Here **Can't call B again**
Run Code Online (Sandbox Code Playgroud)
在这里它说FLAG_ACTIVITY_NEW_TASK产生与“ singleTask”相同的行为-https: //developer.android.com/guide/components/activities/tasks-and-back-stack.html
那么哪些是正确的方案?我做对了,或者我误会了一些东西。
我已经复制了您所描述的行为。
第一种情况基本上没有记录,因为 asingleTask Activity应该始终是任务的根。由于 AndroidtaskAffinity在确定启动 的方式和位置时会使用Activity,因此您singleTask Activity将启动到现有任务中,而不是作为 root 启动Activity。这使得行为不同于记录的行为。当您启动B从D,Android的需要交付Intent给B到一个呼叫onNewIntent(),它不能做C,并D坐在上面B。所以Android的完成C和D,然后调用onNewIntent()上B。
第二个场景显示您现在有 2 个任务,因为singleTask Activity以 root 身份启动到一个新任务中Activity。同样,当D启动时B,Android 需要通过调用来传递Intentto ,如果并且妨碍了它,它就无法做到。因此,Android 完成并交付到in 。BonNewIntent()CDCDIntentBonNewIntent()
第三个场景展示了使用FLAG_ACTIVITY_NEW_TASK. 当使用A启动B时FLAG_ACTIVITY_NEW_TASK,Android 会寻找一个B以 为根的现有任务Activity。由于它没有找到,它B以 root 身份在新任务中启动Activity。当使用D启动B时FLAG_ACTIVITY_NEW_TASK,Android 会寻找一个B以 root 为根的任务,Activity如果找到,则将该任务带到前台,但不会将其传递Intent给onNewIntent(). 这只是将现有任务以它进入后台时所处的状态带到前台的一种方式。这就是你所看到的。这种行为也被记录(排序),但由于所有这些场景之间非常复杂的相互依赖关系,所有可能的情况都没有明确记录。有时您需要通过经验观察而不是阅读文档来发现这是如何工作的。
谢谢你的挑战。
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |