activity使用栈来管理activity们
activity的LaunchMode
1、standard 每次启动都会重新创建一个activity,不管在栈中是否已经存在,新建的activity在栈顶。谁启动了这个activity,这个activity就运行在启动它的那个activity所在的栈中
用application去启动activity,会报错,是因为非activity的context没有任务栈,解决方法是可以为启动的activity指定FLAGACTIVITYNEW_TASK,这样就为他创建一个新的任务栈
2、singleTop,如果新的activity在栈顶,那activity就不会被重新创建,同时回调onNewIntent,不会执行onCreate和onStart方法
3、singleTask,单实例模式,如果栈中存在该activity,则移除栈中该activity上的所有activity,并调用该activity的onNewIntent方法。如果栈中不存在该activity,则创建一个新的activity
4、singleInstance,会直接创建一个新的任务栈,如果该任务栈在后台存在,则此后台任务栈被切换到前台
设置启动模式
1、manifest设置launchmode
2、在代码中intent.addFlags(Intent.FLAGACTIVITYNEW_TASK)
3、两者同时存在时,以第二种为准,第一种无法指定FLAGACTIVITYCLEAR_TOP标识,第二种无法指定singleinstance
activity的flags
这些flag可以设置activity的启动模式
FLAGACTIVITYNEW_TASK,为activity指定singleTask模式
FLAGACTIVOTYSINGLE_TOP,为activity指定singleTop模式
FLAGACTIVITYCLEAR_TOP,将同一任务栈,位于该activity上面的都移除栈,与FLAGACTIVITYNEW_TASK配合使用
FLAGACTIVITYEXCLUDEFROMRECENTS,如果设置新的activity不会再最近启动的activity的列表中保存,等同于在xml中设置andriod:excludeFromRecents="true"
网友评论