1、设置启动模式的方式
方式1:androidManifest指定launchMode
<activity
android:name=".SingleTopActivity"
android:launchMode="singleTop" />
方式2:设置Flags
Intent intent = new Intent(this,SingleTopActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
设置flags的优先级大于清单文件指定
2、Standard模式
标准模式
A:onCreate -> onStart -> onResume
A打开B:
A: onPause -> onStop
B: -> onCreate -> onStart -> onResume
B点击返回:
A: -> onRestart -> onStart -> onResume
B: onPause -> onStop -> onDestory
如果B设置了dialog主题,那么生命周期变为:
A打开B:(不会走A的onStop方法)
A: onPause
B: -> onCreate -> onStart -> onResume
B点击返回:
A: -> onResume
B: onPause -> onStop -> onDestory
3、SingleTop模式
栈顶复用,如果要启动的Activity不位于顶部, 就创建一个新的Activity实例;如果位于顶部就不会创建新的:
Stardard启动模式:
A:onPause -> onStop
B: -> onCreate -> onStart -> onResume
SingleTop启动模式:
onPause -> onNewIntent -> onResume
4、SingleTask模式
栈内复用,如果栈内存再该Activity,就清除栈顶的所有Activity:
A(设置了SingleTask): onRestart -> onStart -> onNewIntent -> onResume
B: -> onDestroy ->
C: onPause ->onSop -> onDestroy
可以看出目标Activity顶部的Activity全部销毁,直接走了onDestory方法
5、SingleInstance模式
单独开一个栈,该栈内仅有一个。
现在有三个Activity: A,B(设置了SingleInstance),C,按A -> B -> C打开,打开的流程生命周期和普通的一样;但此时C单独开了一个栈
从C点击返回,将会直接返回到A:
A: -> onRestart -> onStart -> onResume
B:
C: onPause -> onStop -> onDestroy
A此时点击返回,返回到了B:
A:onPause -> onStop
B: -> onRestart -> onStart -> onPause
在B点击返回,此时A先出栈,随后B也出栈:
A: onDestroy ->
B: onPause -> onStop -> onDestroy