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

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等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值