美文网首页
activity启动模式

activity启动模式

作者: 我看Android | 来源:发表于2020-09-11 14:47 被阅读0次

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:

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

未完待续

相关文章

网友评论

      本文标题:activity启动模式

      本文链接:https://www.haomeiwen.com/subject/hjtgzhtx.html