Android启动模式Intent Flags

2020-04-14  本文已影响0人  _zhw

通过launchMode设置的四种启动模式仅适用于Activity启动Activity,并且采用的都是默认Intent,没有额外添加任何Flag

Intent.FLAG_ACTIVITY_NEW_TASK:是启动模式中最关键的一个Flag

对于非Activity启动的Activity(比如Service或者通知中启动的Activity)需要显式的设置Intent.FLAG_ACTIVITY_NEW_TASK。singleTask和singleInstance在AMS中被预处理后,自动设置了Intent.FLAG_ACTIVITY_NEW_TASK,standard和singleTop不会自动设置Intent.FLAG_ACTIVITY_NEW_TASK。

Intent.FLAG_ACTIVITY_NEW_TASK这个属性更多的关注点是在Task,可以认为没有设置Intent.FLAG_ACTIVITY_NEW_TASK的情况下,taskAffinity可以不考虑,Intent.FLAG_ACTIVITY_NEW_TASK的初衷是在Activity目标taskAffinity的Task中启动。

如果找不到目标Task自然会启动Task,如果目标Task栈根Activity的Intent同新的将要启动的Activity相同,就不启动新Activity,否则启动Activity

Intent.FLAG_ACTIVITY_NEW_TASK

Intent.FLAG_ACTIVITY_CLEAR_TASK:必须配合FLAG_ACTIVITY_NEW_TASK使用

如果目标Task已存在,将清空已存在的目标Task,否则,新建一个Task,之后,新建一个Activity作为根Activity。Intent.FLAG_ACTIVITY_CLEAR_TASK的优先级最高,基本可以无视所有的配置,包括启动模式及Intent Flag,哪怕是singleInstance也会被finish,并重建

Intent.FLAG_ACTIVITY_CLEAR_TASK

Intent.FLAG_ACTIVITY_CLEAR_TOP

单独使用Intent.FLAG_ACTIVITY_CLEAR_TOP,如果同一个栈中原来已有

Intent.FLAG_ACTIVITY_CLEAR_TOP

如果没有则创建,不会去另一个栈中寻找


Intent.FLAG_ACTIVITY_CLEAR_TOP  

如果同时设置了Intent.FLAG_ACTIVITY_SINGLE_TOP,在当前栈已有的情况下就不会重建,而是直接回调onNewIntent方法

同时设置了Intent.FLAG_ACTIVITY_SINGLE_TOP

如果同时设置了Intent.FLAG_ACTIVITY_NEW_TASK,目标是Activity设定的Task栈,如果在这个Task中能找到一个Activity实例,则将其上面的自身处理掉,之后重建

同时设置了Intent.FLAG_ACTIVITY_NEW_TASK

如果同时再加上Intent.FLAG_ACTIVITY_SINGLE_TOP,此时判断topActivity(当前最顶部Task的栈顶)是不是目标Activity,如果不是就会去目标Task中去找,并唤起

再加上Intent.FLAG_ACTIVITY_SINGLE_TOP

如果topActivity是目标Activity,就直接回调topActivity的onNewIntent方法,无论topActivity是不是在目标Task中

topActivity是目标Activity

Intent.FLAG_ACTIVITY_SINGLE_TOP

同launchMode中的singleTop,这里所指的栈顶是最顶部的Task的栈顶

上一篇 下一篇

猜你喜欢

热点阅读