Activity的四种启动模式

启动模式

顾名思义就是activity启动时的执行策略,一共有四种,分别是standard、singleTop、singleTask、singleInstance。

启动模式的设置在AndroidManifest.xml中修改,默认是standard模式,如果需要修改的话要在<activity >中使用  android:launchMode=""   选择启动模式,例子:

        <activity
            android:name=".SecondActivity"
            android:launchMode="singleTop" />
        <activity
            android:name=".MainActivity"
            android:launchMode="standard">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

(1)standard

默认的启动模式,也是最容易理解的启动模式,Activity按照打开顺序一个接一个存入任务栈中,即使打开的是完全相同的Activity(即在目前的Activity再次打开这个Activity)也是新建一个Activity放于栈顶,即原先的Activity的上面。

为了更直观地看到结果,下面用三个Activity演示一下:

先新建三个跳转按钮,分别设置点击跳转逻辑:

    public void toSecondActivity(View view) {
        startActivity(new Intent(MainActivity.this, SecondActivity.class));
    }

    public void toThirdActivity(View view) {
        startActivity(new Intent(MainActivity.this, ThirdActivity.class));
    }

    public void toMyself(View view) {
        startActivity(new Intent(this,getClass()));
    }

界面大概如下:

 模拟A-B-C-A-A-B-B-C-C-C-A,随后一直按返回键,可以看到每次跳转都会新建一个Activity,而back之后会销毁并将下方的Activity置于栈顶。

 singleTop

顾名思义,singleTop就是处于栈顶的Activity不会重复,栈顶的Activity启动相同Activity时会调用onNewIntent来复用该Activity,流程是startActivity - onPause - onNewIntent - onResume。

而启动其他不同Activity则如standard模式一样,将新建Activity置于栈顶,后续即使遇到重复的启动过的Activity只要与栈顶Activity不同也是直接新建一个Activity。

 

 singleTask

顾名思义,就是栈内的Activity不会重复,即相同Activity只可能有一个在栈中。当启动一个栈内不存在的Activity时会create一个新Activity,但若是栈内已有相同Activity则会调用onNewIntent将处于栈中的Activity调到栈顶,而原本处于该Activity上方的Activity会全部被destroy,也即被踢出栈。

这里将ThridActivity改为standard模式,随后测试发现singleTask模式下启动已有Activity会先destroy栈顶到即将执行onNewIntent的Activity之间的Activity,随后即将启动的Activity进行onNewIntent后再destroy原先位于栈顶的Activity。

点击顺序为:A-B-C-C-B-C-A-back

singleInstance

singleInstance模式下每个栈内都只能有一个Activity,未启动过的Activity在新建时都会存放于一个新的栈中,每次启动已启动过的Activity则会调用onNewIntent复用原先的Activity。

在这种模式下,整个系统都只可能有这一个Activity实例。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值