关于使用new_task不生效的场景:
前提:
ActivityA是standard标准启动模式,taskAffinity指定为AffinityA
ActivityB是singleTop栈顶复用启动模式,taskAffinity指定为AffinityB
步骤:
栈AffinityA中栈顶的ActivityA先不带new_task启动singleTop的ActivityB,会在AffinityA栈顶新建ActivityB(虽然ActivityB的taskAffinity是AffinityB),
此时AffinityA的栈顶是ActivityB,
再带new_task启动ActivityB,复用栈AffinityA中的ActivityB,不会新建AffinityB,更不会在AffinityB中新建ActivityB
栈AffinityA中启动ActivityB(ActivityB的taskAffinity被指定为AffinityB)
即使带了new_task也不一定会新建栈AffinityB
而是要先判断ActivityB的启动模式,及是否带了singletop、cleartop标志等
新建栈与栈顶复用的优先级(冲突):
不满足栈顶复用才会新建栈
启动一个启动模式是标准模式的Activity,不一定会新建该Activity
前提:
ActivityA是standard标准启动模式,taskAffinity指定为AffinityA
ActivityB是standard标准启动模式,taskAffinity指定为AffinityB
步骤:
栈AffinityA栈顶的ActivityA先用new_task启动ActivityB
会新建栈AffinityB,并在该栈新建ActivityB
当前前台栈是AffinityB,栈顶是ActivityB,继续 用new_task启动ActivityB,会复用ActivityB,不会新建ActivityB
对 FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP 的理解
网友评论