activity启动模式介绍


一、android任务栈

  • android任务栈又称为Task,它是一个栈结构,具有后进先出的特性,用于存放我们的Activity组件
  • 我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件, 一个任务栈包含了一个activity的集合, 只有在任务栈栈顶的activity才可以跟用户进行交互
  • 在我们退出应用程序时,必须把所有的任务栈中所有的activity清除出栈时,任务栈才会被销毁。当然任务栈也可以移动到后台, 并且保留了每一个activity的状态. 可以有序的给用户列出它们的任务, 同时也不会丢失Activity的状态信息
  • android通过ActivityRecordTaskRecordActivityStackActivityStackSupervisorProcessRecord有序地管理每个activity

二、启动模式

1、标准启动模式 — Standard

该模式是启动的默认模式,每次启动Activity都会创建一个新的Activity实例,activity会被一次顺序压入栈中

2、栈顶复用模式 — SingleTop

如果要启动的Activity已经在栈顶,则不会重新创建Activity,只会调用该该Activity的onNewIntent()方法。
如果要启动的Activity不在栈顶,则会重新创建该Activity的实例

应用场景

登录页面、WXPayEntryActivity、WXEntryActivity、推送通知栏

3、栈内复用模式 — SingleTask

如果要启动的Activity已经存在于它想要归属的栈中,那么不会创建该Activity实例,将栈中位于该Activity上的所有的Activity出栈,同时该Activity的onNewIntent()方法会被调用

应用场景

程序模块逻辑入口:主页面、WebView页面、扫一扫页面、购物界面、确认订单界面、付款界面

4、全局唯一模式 — SingleInstance

要创建在一个新栈,然后创建该Activity实例并压入新栈中,新栈中只会存在这一个Activity实例
如果已经创建过目标Activity实例,则不会创建新的Task,而是将以前创建过的Activity唤醒

应用场景

来电显示、呼叫界面、锁屏等


三、设置启动模式方式

1、Manifest中静态设置

android:launchMode="singleTask"

2、动态设置

intent.setFlags(...);

几种常见标记位flag

  • FLAG_ACTIVITY_NEW_TASK
    此标记位作用是为Activity指定“singleInstance”启动模式,其效果和在XML中指定相同android:launchMode="singleInstance"
  • FLAG_ACTIVITY_SINGLE_TOP
    此标记位作用是为Activity指定“singleTop”启动模式,其效果和在XML中指定相同android:launchMode="singleTop"
  • FLAG_ACTIVITY_CLEAR_TOP
    具有此标记位的Activity,当它启动时,在同一个任务栈中位于它上面的Activity都要出栈。此标记位一般会和singleTask启动模式一起出现,此情况下,若被启动的Activity实例存在,则系统会调用它的onNewIntent,其效果和在XML中指定相同android:launchMode="singleTask"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值