1.standard
standard作为默认的启动模式,其特点是多次启动同一个aty的时候,会创建多个activity实例
而不会复用。
适用场景:当前的任务的返回栈为a-b-c-d。d的启动模式为standard,当启动d的时候,返回栈
中将会添加d的新实例,返回栈的结构为a-b-c-d-d。
2.singletop
singleTop是栈顶复用模式。就是当activity位于栈顶的时候,启动该activity,不会创建该activity,而是调用的该activity的onNewIntent方法。如activity不是位于栈顶,还是会创建新的实例。
3.singleTask
singleTask栈内复用模式,只要Activity在栈中存在,则每次启动该Acitivty时都不会创建新的Acitivity实例,井且该Acitivty之上的所有Activity都会出栈,
适用场景:当前任务的返回栈是A-B-C-D,C启动模式是singleTask,启动C时,C的现有实例会通过onNewlntent()接收Intent,D会出栈,返回栈结构变为A-B-C。
4.singleinstance
与singleTask差不多,只是在启动Activity的时候不会将该Activity放入当前的返回栈,而是会新建一个返回栈单独管理该Acitivity,并且该Activity始终是返回栈中雎一的成员。
适用场景:当前的任务的返回栈时A-B-C,另外D的启动模式是singleinstance,在栈中不存在D的实例,那么当C启动D时,D并不会加入到当前任务的返回栈,而是会新建一个返回栈去管D。
下面需要注意:
onNewIntent()和onConfigurationChanged()生命周期方法的场景
onNewIntent():
当Activity重新启动时,而不是创建新的Activity实例的时候,onNewlntent()将会在onRestart()和onResume()之前调用,也就是说四种启动模式中除了standard不会调用onNewlntent(),singleTop只有Activity处于栈顶的时候才会调用,singleTask和singleinstance则一定会调用。
onConfigurationChanged:
默认情况下Configuration()改变的时候,Activity会重新启动.而如果在AndroidManifest.xml中配置Andraid:configChanges属性,则当配置的属性发生変化的时候(例如配置android:configChanges="orientation“,则当屏慕方向发生变化的时候),不会去里新启动Acitivity,而是会调用onConfigurationChanged方法。
网友评论