Activity启动模式

Activity配置launchMode属性代表启动模式,Activity启动模式有四种,分别为:standard、singleTop、singleTask、singleInstance。

Android 12系统新增singleInstancePerTask模式,当编译SDK大于30的时候方可使用该属性,Android 12以上系统上运行才会生效。如果系统小于12即使使用了该属性也不会生效,默认为标准模式。

standard标准模式

给任意页面添加standard属性或者不添加都会创建一个新实例。

实际的跳转流程:A页面 -> B页面 -> C页面 -> D页面

添加属性后流程:A页面 -> B页面 -> C页面 -> D页面

默认属性,不写launchMode属性默认为android:launchMode="standard"。

singleTop栈顶复用模式

给D页面添加singleTop属性,D页面在栈顶。

实际的跳转流程:A页面 -> B页面 -> C页面 -> D页面 -> D页面

添加属性后流程:A页面 -> B页面 -> C页面 -> D页面

使用场景:防止连续过快点击按钮多次打开同一个页面。

需要注意的是:这个Activity的onCreate、onStart不会被系统调用。

默认模式下执行:onCreate -> onStart -> onResume

singleTop模式下:onPause -> onResume

所以在singleTop模式下如果有在onCreate中加载数据和执行一些操作时,需要注意是否需要及时更新这些数据。比如当第一次打开页面会执行onCreate,当这个页面在栈顶时,就不会再次执行onCreate了,如果这时后台数据或者详情的数据已经变化,这时数据就不是最新的,所以要保持数据是最新的,可以在onResume中更新数据。

singleTask栈内复用模式

给B页面设置singleTask属性,B页面不在栈顶。当B页面在栈顶的话相当于singleTop属性。

实际的跳转流程:A页面 -> B页面 -> C页面 -> D页面 -> B页面

添加属性后流程:A页面 -> B页面

添加属性后C页面和D页面其实也执行了,只是再次执行B页面的时候把C和D页面清出了栈。

使用场景:如果没有引用公共栈管理类的话,首页或者指定页加入singleTask属性,从该页面一直打开很多页面,最后想退出所有页面到首页,从最后那页再次跳转到首页即可。如果不加singleTask属性,当跳转到首页后再点击返回按钮又会回到最后那页。

singleInstance单实例模式

拥有singleTask模式特性,但只能单独的位于一个任务栈中。

实际的跳转流程:A页面 -> B页面 -> C页面 -> D页面 -> B页面

添加属性后流程:B页面 -> A页面 -> C页面 -> D页面

默认模式下执行:onCreate -> onStart -> onResume

singleInstance模式下:onRestart -> onStart -> onResume

singleInstancePerTask每个任务一个单实例模式

同时拥有singleTask和singleInstance特性。

给B页面添加singleInstancePerTask属性。Android 12及以上系统设置才起作用。

实际的跳转流程:A页面 -> B页面 -> C页面 -> D页面 -> B页面

添加属性后流程:A页面 -> B页面

不再次跳转到B页面还是按实际流程走,如果再跳到B页面,C和D页面会依次onDestroy。

B页面会执行:onRestart -> onStart -> onResume

其实效果和singleTask属性效果是一样的,但是每个任务位于位于一个任务栈中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

举儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值