【声明:】本文是作者(蘑菇v5)原创,版权归作者 蘑菇v5所有,侵权必究。本文首发在简书。如若转发,请注明作者和来源地址!未经授权,严禁私自转载!
通过Acitivty的xml标签来改变任务栈的默认行为
使用
android:launchMode="standard|singleInstance|singleTask|singleTop"
来控制Acivity
任务栈。
-
任务栈是一种后进先出的结构。
位于栈顶的Activity
处于焦点状态,当按下back
按钮的时候,栈内的Activity
会一个一个的出栈,并且调用其onDestory()
方法。如果栈内没有Activity
,那么系统就会回收这个栈,每个APP
默认只有一个栈,以APP
的包名来命名.
-
standard : 标准模式
每次启动Activity
都会创建一个新的Activity
实例,并且将其压入任务栈栈顶,而不管这个Activity
是否已经存在。Activity
的启动三回调(onCreate()->onStart()->onResume())
都会执行。
-
singleTop : 栈顶复用模式
这种模式下,如果新Activity
已经位于任务栈的栈顶,那么此Activity
不会被重新创建,所以它的启动三回调就不会执行,同时Activity
的onNewIntent()
方法会被回调.如果Activity
已经存在但是不在栈顶,那么作用与standard
模式一样.
-
singleTask: 栈内复用模式
创建这样的Activity
的时候,系统会先确认它所需任务栈已经创建,否则先创建任务栈.然后放入Activity
,如果栈中已经有一个Activity
实例,那么这个Activity
就会被调到栈顶,onNewIntent()
,并且singleTask
会清理在当前Activity
上面的所有Activity.(clear top)
-
singleInstance : 加强版的singleTask模式
这种模式的Activity
只能单独位于一个任务栈内,由于栈内复用的特性,后续请求均不会创建新的Activity
,除非这个独特的任务栈被系统销毁了
Activity
的堆栈管理以ActivityRecord
为单位,所有的ActivityRecord
都放在一个List
里面.可以认为一个ActivityRecord
就是一个Activity
栈