activity启动模式

activity四种启动模式

一、standard:

默认启动模式,每次启动都会创建一个新的activity实例对象

FirstActivity SecondActivity 均为 standard
生命周期:初始创建
FirstActivity:onCreate、onStart、onResume

1.1创建成功 跳转下一界面

FirstActivity: onPause
SecondActivity: onCreate
SecondActivity: onStart
SecondActivity: onResume
FirstActivity: onStop

1.2、返回当前界面 SecondActivity 调用finish方法 同返回键

SecondActivity: onPause
FirstActivity: onRestart
FirstActivity: onStart
FirstActivity: onResume
SecondActivity: onStop
SecondActivity: onDestroy

1.3、返回当前界面 SecondActivity 调用startActivity方法

SecondActivity: onPause
FirstActivity: onCreate
FirstActivity: onStart
FirstActivity: onResume
SecondActivity: onStop

1.4、自己启动自己 调用startActivity方法 生命周期与2 一致

1与2 差异在于activity是否重建 对标standard 启动即新建

2、singleTop:

如果activity实例位于当前任务栈顶,就重用栈顶实例并回调该实例的onNewIntent方法,否则走新建流程
FirstActivity 为 singleTop SecondActivity 为 standard

生命周期:初始创建
FirstActivity:onCreate、onStart、onResume

2.1 创建成功 跳转下一界面

见1.1

2.2、返回当前界面 SecondActivity 调用finish方法 同返回键

见1.2

2.3、返回当前界面 SecondActivity 调用startActivity方法

SecondActivity: onPause
FirstActivity: onCreate
FirstActivity: onStart
FirstActivity: onResume
SecondActivity: onStop

2.4、自己启动自己 调用startActivity方法

FirstActivity: onPause
FirstActivity: onNewIntent
FirstActivity: onResume

重点在于 当前即将新建Activity对象是否已是栈顶元素 是则重用 否则新建

3、singleTask:

如果要启动的Activity在栈中存在实例,则不会重新创建Activity,而是直接使用栈里的Activity实例,并回调onNewIntent方法。并且会把这个实例放到栈顶,之前在这个Activity之上的都会被出栈销毁。
FirstActivity 为 singleTask SecondActivity 为 standard

生命周期:初始创建
FirstActivity:onCreate、onStart、onResume

3.1创建成功 跳转下一界面

见1.1

3.2、返回当前界面 SecondActivity 调用finish方法 同返回键

见1.2

3.3、返回当前界面 SecondActivity 调用startActivity方法

SecondActivity: onPause
FirstActivity: onNewIntent
FirstActivity: onRestart
FirstActivity: onStart
FirstActivity: onResume
SecondActivity: onStop
SecondActivity: onDestroy
重点在最后两个方法 SecondActivity 在跳转FirstActivity后销毁了

3.4、自己启动自己 调用startActivity方法

FirstActivity: onPause
FirstActivity: onNewIntent
FirstActivity: onResume

总结:若singleTask activity位于栈顶时 重新satrtActivity 不会创建新的对象而是 调用onPause onNewIntent onResume 方法
若singleTask activity不在栈顶时且栈中已存在该对象 重新satrtActivity 不会创建新的activity对象 会销毁原对象到栈顶之间的所有activity对象并将此对象置于栈顶。若栈中无该对象重新satrtActivity会按默认启动方式进行

注:taskAffinity 这个属性与singleTask 结合会影响生命周期(没研究过)

4、singleInstance:

singleInstance activity所在的栈中只会有这一个activity

未完待续

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Activity的启动模式 在实际项目中需要根据特定的需求为每一个Activity指定恰当的启动模式。 启动模式一...
    寒桥阅读 1,194评论 0赞 0
  • 这几天时间比较充裕,多写几篇。今天来写一下activity启动模式。在昨天已经说过了四种luncher的内容,下面...
    白板x阅读 381评论 0赞 0
  • 本来想针对Activity中的启动模式写篇文章的,后来网上发现有人已经总结的相当好了,在此直接引用过来,并加上自己...
    小帝Ele阅读 557评论 0赞 0
  • Android学习计划# #第三周# 话题: 理解Activity的启动模式。1、Activity的启动模式有哪几...
    boboyuwu阅读 554评论 0赞 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 8,158评论 16赞 22

友情链接更多精彩内容