美文网首页
Activity之启动Intent Flag和taskAffin

Activity之启动Intent Flag和taskAffin

作者: 龙在阿里 | 来源:发表于2016-08-05 11:48 被阅读128次

    1, 相关概念

    对生命周期和Task/Back Stack有影响的Intent Flag主要有:

    FLAG_ACTIVITY_NEW_TASK

    FLAG_ACTIVITY_CLEAR_TOP

    FLAG_ACTIVITY_SINGLE_TOP

    FLAG_ACTIVITY_NEW_TASK

    会产生与 "singleTask" launchMode 值相同的行为.

    在新任务中启动Activity. 如果已有包含该Activity的任务,则该任务会转到前台并恢复其最后状态,同时该Activity会在onNewIntent()中收到新Intent.

    FLAG_ACTIVITY_SINGLE_TOP

    会产生与 "singleTop" launchMode 值相同的行为.

    如果正在启动的Activity是当前Activity(位于返回栈的顶部), 则现有实例会接收对 onNewIntent()的调用,而不是创建 Activity 的新实例.

    FLAG_ACTIVITY_CLEAR_TOP

    如果正在启动的 Activity 已在当前任务中运行,则会销毁当前任务顶部的所有 Activity,并通过 onNewIntent() 将此 Intent 传递给 Activity 已恢复的实例(现在位于顶部),而不是启动该 Activity 的新实例.

    如果指定 Activity 的启动模式为 "standard",则该 Activity 也会从堆栈中删除,并在其位置启动一个新实例,以便处理传入的 Intent。 这是因为当启动模式为 "standard" 时,将始终为新 Intent 创建新实例.

    2, 结论

    一、FLAG_ACTIVITY_NEW_TASK并不像官方文档所说的等同与singleTask.

    二、在没有任何其他flag组合和taskAffinity设置的情况下, 同一应用内FLAG_ACTIVITY_NEW_TASK启动另外一个Activity, 不会在新的Task中创建实例, 也不会有实例复用.

    三、FLAG_ACTIVITY_SINGLE_TOP作用等同与singleTop, 当Task的top Activity是该Activity时, Activity复用.

    四、FLAG_ACTIVITY_CLEAR_TOP会clear top, 也就是说如果Task中有ABCD, 在D中启动B, 会clear掉B以上的CD. CD销毁.

    五、注意, FLAG_ACTIVITY_CLEAR_TOP并不意味着重用, 默认Activity为standard模式的话, 只是会clear其top的其他Activity实例, 该Activity并不会重用, 而是也会销毁, 然后创建一个新的该Activity实例来响应此Intent.

    六、taskAffinity需结合FLAG_ACTIVITY_NEW_TASK使用, 此时会再新的Task中寻找/创建待启动的Activity实例.

    七、强烈建议FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TOP结合使用.

    八、Intent Flag并不能代替launchMode, 至少在想重用Activity的情况下, 你需要做的是考虑launchMode而非Intent Flag.

    相关文章

      网友评论

          本文标题:Activity之启动Intent Flag和taskAffin

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