Android基础之Activity launchMode详解

本文来自刘兆贤_Java高级,Android旅行,Java底层探索-CSDN博客 ,引用必须注明出处!

       Activity的启动模式,英文名lauchMode,是页面的基础属性,属于工作中必须掌握的知识点。lanchMode的设置不同,会影响Activity生命周期中各个方法的调用顺序,也会影响Activity在堆栈中的保存方式。做了许多个项目,对此有一点总结,希望对大家能有些许帮助。

       先讲一个概念性问题,Actvity需要先在AndroidManifest.xml中注册,然后才能调用;Activity启动模式的定义方法是:android:launchMode="",有四个值可选,分别是:standard,singleTask,singleTop,singleInstance。

        通常,应用里打开的历史Activity,都存在一个栈里(栈是个先进后出容器);通过Back键操作,来弹出Activity实例,位于栈底的Activity,最后退出。每个应用,都在自己的进程里运行,我们可以用Context的startActivity方法,来启动另一个Activity(可以是本应用的,也可以是其它应用,参数设置正确即可)。不同的启动方式,会给用户带来不同的跳转体验,所以理解启动模式,有助于开发者做出体验更好的应用。

        我们来讲解各个设计方式的意思

Acivity启动方式,默认为standard(可以不设),这样每次调用startActivity方法,都会新建一个实例对象,那么标记为standard的Activity,可以在栈里存在多个,跟其他在一个task里工作,不新启动task。

        singleTop指启动的Activity在栈顶则不新建,传递数据通过onNewIntent()。通常设为singleTop的Activity,保证它在最顶部,跟其他在同一个task里工作,不新启动task。

        singleTask指该Activity如果存在,则不新建,直接使用;区别是,普通activity都在onCreate里接收数据,而它此时在onNewIntent()方法里接收数据(仅此场景会被调用);否则新建一个task(activity存放栈),把此Activity装进去,被标记为singleTask的Activity会存放在同一个task中。

重新打开执行:onNewIntent->onRestart->onStart->onResume->onPostResume

        singleInstance跟singleTask差不多,不过它标记的Activity单独存在一个task(只有它一个)里,且装此activity的task仅此一个;而singleTask定义是,在task里仅存在1个(还有其他activity)此activity,但这样的task可能有多个;有几个这样的Activity,则会生成对应数量task来装载它们。

重新打开执行:onNewIntent->onRestart->onStart->onResume->onPostResume

        另一点不同在于标记为singleTask的Activity被自启动后,有种界面刷新的感觉,但被标记为singleInstance的则不会。因为同个栈里的singleTask标记的activity,会重绘界面;而singleInstance标记的activity仅从后台启动而已。

另外,当前页面不是主Activity,按下Home键退出,当再次进入应用的时候,仍旧进入主Activity,这是为什么呢?

因为当前activity的launchmode,设置为singleTask或singleInstance的原因。我们知道这两个启动模式,都是用一个task,去装载当前的activity;按下Home键时,会关闭最后打开的页面,再次启动时,从主task里启动,则只有一个主activity。

        总而言之,launchmode的设置,属于Activity栈管理的一种方式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘兆贤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值