初始情形
1. 三个Activity循环调用,默认启动模式失效,详细学习启动模式。
2. 页面跳转需要传递数据,使用SingleTask模式,后面传递的Intent需要刷新,否则是第一个intent数据。
四种模式
1. standard
activity默认的启动模式,即每次调用都创建一个新的实例压入栈顶。
因此,可以重复调用,在栈中叠加。
如图:反复调用自身,每次都创建实例,进行压栈。
A 为 standard 模式。
2. singleTop
栈顶不重复叠加模式,即相同的activity叠加不创建新的实例入栈。
因此,可以间隔叠加形成循环,但不能自身调用自身。
如图,自身调用自身,不重复创建,并调用onNewIntent方法刷新intent。
A 为 singleTop 模式,B 为 standard 模式
3. singleTask
单栈单实例模式,即栈中只会存在一个activity的实例,重复调用将栈中实例弹至栈顶。
因此,重复调用不创建新实例,弹栈至该实例位于栈顶,即重复调用时之前实例上的所有实例都会被弹出。
如图,重复调用,销毁掉实例上的所有其他实例,并调用onNewIntent方法刷新intent。
A 为 singleTask 模式, B 为 standard 模式
4. singleInstance
多栈单实例模式,即为此模式的activity单独创建任务栈,只存放其实例。
因此,调用就会创建新的任务栈。
如图,调用singleInstance模式的activity时,会单独开辟一个任务栈,只放入A实例。
A 为 singleInstance 模式, B 为 standard 模式
特殊情况参数传递
1. singleTop 反复调用自身
2. singleTask 重复调用
这两种情况都会存在,intent数据刷新问题。
例如:A是singleTask 模式,B为standard模式。
AB可以互相跳转,且B到A会传递数据intent。
执行如下过程: B -> A -> B -> A 如图。
.
重写方法如下,刷新intent数据
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}