Android Activity的四种启动模式分析及其应用场景

启动模式

1.标准模式(standard)

standard启动模式称之为标准模式。是Activity使用最多的一种启动模式。在mainfest注册的Activity的launchMode不设置即默认就是标准模式,每次启动这 个Activity都会在栈内新建这个Activity的实例。

2.栈顶复用模式(singleTop)

singleTop启动模式称之为栈顶复用模式。就是说如果当前这个Activity实例处于栈顶那么就直接复用无需在栈内再生成这个实例。如果当前这个Activity实例在栈内不处于栈顶,那么其实就相当于standard启动模式。

3.栈内单例模式(singleTask)

singleTask启动模式称之为栈内单例模式。Activity如果设置了singleTask启动模式,那么该Activity在栈内只能有一个实例,只是如果该Activity不处于栈顶则把该Activity之上的其它Activity的实例从栈内移出,该Activity处于栈顶。如果该Activity本身就处于栈顶直接复用(可以看成是singleTop模式)。

4.堆内单例模式(singleInstance)

单独开辟一个任务栈只存该实例。

很重要的一点(面试常问):在singleTop(处于栈顶的时候)、singleTask、singleInstance中如果Activity实例已经存在,当再次调用startActivity跳转该页面时会执行onNewIntent(),不会执行onCreate()、onStart()。

如下代码:

findViewById(R.id.tv).setOnClickListener(v -> {
            startActivity(new Intent(SecondActivity.this,SecondActivity.class));
        });

我们的SecondActivity设置的是singleTop,在处于栈顶的时候我们点击按钮会看到
在这里插入图片描述可以看到并没有执行onCreate、onStart而是调用了onNewIntent。
onNewIntent源码中的解释

在这里插入图片描述

In either case, when the activity is re-launched while at the top of the activity stack instead of a new instance of the activity being started, onNewIntent() will be called on the existing instance with the Intent that was used to re-launch it.
翻译过来:
在任何情况下,当Activty处于栈顶并将被重新启动时,不会新创建一个新的实例,取而代之的是使用去重新启动的intent调用已经存在的实例中onNewIntent方法。

使用场景

1.standard
Activity没有特殊要求时可以默认。

2.singleTop
适合应用于一些推送相关的页面和一些商品详情页。
比如我们app对接的推送通知。可能会收到很多推送,如果我们点击进去进入的页面相同只是内容不同只需要通过Intent传入相应的内容即可。
很多电商类的App,商品列表点击进去是商品详情页,商品详情页下面又有商品列表点进去还是商品详情页。
所以这两种情况singleTop就非常合适了。

3.singleTask
singleTask最常使用的就是一个APP的首页。因为一般为一个APP的第一个页面,且长时间保留在栈中,所以最适合设置singleTask启动模式来复用。

4.singleInstance
singleInstance比较常见于调用一些系统方法,因为一个应用中我们只能保留一个实例,并单独存在一个任务栈中,所以只要需要直接复用即可。比如调用系统打电话、闹钟、日历。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值