Activity 设置SingleTask模式,当栈中已有Activity实例时的生命周期

本文深入解析了Android中SingleTask启动模式的工作原理。当Activity已存在于栈中时,SingleTask模式会将其余活动出栈并置顶,不再创建新实例。详解了onNewIntent方法的作用及如何正确使用setIntent保持Intent一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SingleTask模式在已经存在Activity实例时再次启动activity生命周期:
Activiyt的普通启动模式每次利用startActivity都会创建新的Activity实例,有些场景需要栈中只有一个Activity实例,类似app的主页MainActivity,这时就需要用到SingleTask。

SingleTask模式下会首先判断栈内是否已经存在该Activity的实例,如果存在实例,会将该实例之上所有的activity出栈(销毁),把该实例置于栈顶。如果不存在实例,才会重新创建该Activity的新实例,并且入栈。

普通的Activity启动后的生命周期为onCreate-》onstart-》onresume,每次利用Intent启动一个Activity都会创建新的实例,都会走上面的生命周期。

当launchMode设置为singleTask的时候,启动这个Activity时如果栈中已经存在一个实例,系统不会再创建新的实例,会直接传递到已有的Activity实例,这时不会再走onCreate方法而是调用onNewIntent方法,之后直接调用onstart,onresume,完整的过程为onNewIntent->onStart->onResume。

onNewIntent(Intent intent)方法参数为intent,传递的操作就在这个intent中,而不是onCreate中利用getIntent中获取的Intent。同步这个新的Intent需要利用 setIntent(intent);之后利用getIntent获取到的Intent就和onNewIntent的一致了。
附加:
如果在Activity上显示dailog,当dialog遮挡Activity的界面时会不会触发Activity的生命周期,答案是不会触发ActivityonPause,onResume等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lidongxiu0714

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

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

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

打赏作者

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

抵扣说明:

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

余额充值