Activity的启动模式

Activity的启动模式

Activity为什么需要启动模式?

    Activity的默认启动模式为Standard模式,在这种模式下,每次启动同一个Activity都会创建一个新的实例并将这个实例放在任务栈当中,而栈是一种“后进先出”的结构。当每次按返回键的时候都会有一个Activity出栈,直到栈内没有任何Activity之后,Android系统才会把这个任务栈回收。那么问题就来了,每此启动的是同一个Activity为什么还要多次创建,创建一次下次复用不就行了?是的,Android在设计的时候也考虑到了这个问题,所有才有了这四种启动模式:Standard,SingleTop,SingleTask和SingleInstance。

Standard:

     Activity默认的启动模式,每次启动都会创建一个新的实例。在这种模式下,Activity启动时的生命周期就会走正常的启动流程:onCreate , onStart , onResume生命周期方法。一个栈中可以有多个相同Activity的实例,同样一个Activity的实例页可以属于不同的栈,当这个Activity被启动时,谁启动的它,它就会在哪一个栈中运行。适用场景:大多数场景下。

SingleTop:

     Activity的栈顶复用模式,当将要创建的这个Activity已经处于栈顶,那么这个Activity将不会被创建,会直接调用栈顶的Activity,此时会走Activity的onNewIntent生命周期方法,而不会走onCreate,onStart方法。如果栈内已经有了将要创建的Activity实例,但是不会在栈顶,那么在这种模式下,还会创建新的实例。  适用场景:浏览器书签。 避免栈顶的activity被重复的创建,解决用户体验问题。

SingleTask:

     Activity的栈内复用模式,当将要创建的这个Activity已经处于栈内,那么这个Activity将不会被创建,会直接调用栈内的Activity,此时会走Activity的onNewIntent生命周期方法,而不会走onCreate,onStart方法。如果栈内已经有了将要创建的Acitivity实例,虽然不是在栈顶,那么在这用模式下,不会再创建的新的实例。注意一点:在SingleTask模式下会有clearTop的效果,就是说如果要复用的这个Activity实例如果不在栈顶的话,会导致栈内在此实例上面的所有实例被销毁。  应用场景:浏览器activity, 整个任务栈只有一个实例,节约内存和cpu的目的。                        

SingleInstance :

      升级版的SingleTask模式,具有所有SingleTask的特性之外。SingleInstance模式下启动Activity创建的实例都会在单独的栈中,以后启动此Activity会直接调用这个栈中的Activity。除非此任务栈被系统销毁了会再次创建新的实例。应用场景:呼叫来电界面 。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值