美文网首页
Activity的四种启动模式

Activity的四种启动模式

作者: 天路_9c23 | 来源:发表于2018-07-30 11:59 被阅读0次

    一、模式介绍

    Standard标准模式(默认模式)

    1.每次创建一个Activity新的实例,不管这个实例是否在栈中存在
    2.生命周期:符合Activity的生命周期,它的onCreat,onStart,onResume都会被调用
    3.举例:如果此时Activity 栈中以此有A、B、C三个Activity,此时C处于栈顶,启动模式为Standard模式。
    若在C Activity中加入点击事件,须要跳转到还有一个同类型的C Activity。结果是还有一个C Activity进入栈中,成为栈顶。

    SingleTop栈顶复用模式

    1.分两种情况:
    a.如果要创建的Activity位于栈顶,此时不会再创建此Activity,直接使用栈顶的该Activity实例
    b.如果要创建的Activity不位于栈顶,此时会又一次创建该Activity的实例,并压入栈顶,同Standrad模式一样
    2.生命周期
    a.如果栈顶复用,则不会onCreat,onStart,调用onNewIntent方法
    b.如果不在栈顶,重新创建,则会执行onCreat,onStart,onResume

    SingleTask栈内复用模式

    1.分两种情况:
    a.如果需要创建的Activity已经位于栈中,不再创建实例,而是将此Activity上面的其他Activity销毁,让此Activity位于栈顶
    b.如果不在栈中,则需要创建实例
    2.生命周期
    a.如果栈内有该Activity的实例,则不会调用onCreat,onStart,会调用onNewIntent方法
    b.如果栈内不存在,则创建实例,调用onCreat,onStart,onResume生命周期方法

    SingleInstance单实例模式

    全局单例模式,是一种加强的SingleTask,它经常使用于系统中的应用,整个系统只有一个,我们一般不会用到

    二、使用方式(分两种)

    静态方法

    在Manifest.xml中指定Activity的启动模式
    举例:
    <activity android:name="..activity.MultiportActivity" android:launchMode="singleTask"/>

    动态方法

    在new出Intent的实例后,通过Intent的setFlags方法动态指定启动模式
    举例:
    Intent intent = new Intent();
    intent.setClass(context, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);

    两种方法比较

    1.优先级:动态>静态,如果两者同时存在,以动态方式为准
    2.静态方式为Activity直接指定FLAG_ACTIVITY_CLEAR_TOP标识;动态方式为Activity指定SinleInstance启动模式

    相关文章

      网友评论

          本文标题:Activity的四种启动模式

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