美文网首页
Android启动模式Intent Flags

Android启动模式Intent Flags

作者: _zhw | 来源:发表于2020-04-14 22:32 被阅读0次

    通过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的栈顶

    相关文章

      网友评论

          本文标题:Android启动模式Intent Flags

          本文链接:https://www.haomeiwen.com/subject/tqtfvhtx.html