栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Activity的四种启动模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Activity的四种启动模式

启动模式

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

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

        
        
            
                
                
            
        
(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实例。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号