- 四种启动模式:
1.standard
在栈管理中,每一次有新的活动启动就会对活动创建一个新的实例, 例如我在 aActivity 中在启动一次 aActivity , 栈内就会出现两个 aActivity, 而不是一个. 这时用户需要按2次返回键, 才会退出这个程序。
2.singleTOP
singleTop 和 standard 的区别在于, 当属于 singleTop 的 aActivity 在栈顶时, 启动 aActivity 就不会像 standard 那样创建一个新的 aActivity 的实例, 但 aActivity 不在栈顶时, singleTop 还是会创建一个新的 aActivity。
即singleTop 当 Activity 在栈顶时启动自己不会再创建一个新的实例,而 standard 是无论何时都会创建新的实例。
3.singleTask
singleTask 就是解决以上两个启动模式里面重复创建实例的启动模式, 他会在你启动 Activity 时在栈内进行查找, 如果栈内有即将要被启动的 Activity 时就会把这个 Activity 调到栈顶. 如果栈内没有这个 Activity 才会重新创建, 减少了重复创建 Activity实例。
4.singleinstance
该启动模式和之前的三个启动模式概念完全不一样, 只要是被设置过 singleinstance 的启动模式的 Activity会启动一个新的返回栈来管理这个活动。
例如有activityA,activityB,activityC这三个activity,将activityB设置为SingleInstance模式。
1.当A开启B,B开启C,如果finish activityC,那么会显示activityA而不是activityB,这是因为activityB和activityA、activityC所处的栈不同,A,C处于同一个返回栈,而B处于一个新的返回栈中。当C关闭了,就会显示C所处栈的下一个activity即A。A再关闭后任务栈清空,销毁,这时候会找到新的任务栈返回B(即返回时显示顺序为:C——>A——>B)
2.当A开启B,然后返回桌面,再从桌面点开应用,显示的是A,这是因为launch启动应用的时候 会从默认的栈找到栈顶的activity显示,singleinstance模式开启的栈是辅助栈。
3.当A开启C,C开启B后,此时B开启A,结果显示的是C,这还是两个栈造成的,B开启A的时候,其实是到达A所处的栈,栈顶是C,所以显示C。
2.四种启动模式的应用场景:
1.standard:
需要每次创建一个新的实例的活动使用standard模式。例如新建邮件,新建文档之类的场景,每创建一次都是新建一个单独的实例。
2.singleTop:
需要在当前activity中多次创建同类型activity的活动使用singleTop模式。例如登录页面、推送通知栏等。
3.singleTask:
需要保持整个栈内单一实例的活动使用singleTask模式。例如程序模块逻辑入口:主页面、WebView页面、扫一扫页面、电商中:购物界面,确认订单界面,付款界面等。
4.singleinstance:
需要实现界面分离逻辑的活动使用singleinstance模式。锁屏界面、来电显示,应用检查手势密码界面等。