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

未完待续

你可能感兴趣的:(activity启动模式)