android启动跳转actvity有以下四种模式:standard,singleTask,singleTop.singleInstance
在开发过程中根据实际情况和场景灵活使用可以减少没变要的重复activity的创建等问题,使用这些模式的方式有两种一种是通过代码添加FLAG的方式也可以通过整体配置文件androidManifest文件中设置例如:
<activity name=".A" android:lanchModel="standard" />
下面大概介绍一下这四种启动模式的作用
1、standard
首先standard这种模式是系统默认的启动模式,可以不用设置,使用此模式打开跳转activity的话每次都会重新创建一个新的对象来展示,因此在此模式下可以有多个相同的实例。使用该模式则是谁启动则与谁在同一个任务栈中
例如:在A1中点击打开A2,在A2中点击按钮打开A1,在A1再次点击打开A2着这样在栈中的顺序就是A1-A2-A1-A2,使用返回键退出时按照前面顺序的反向一个一个退出。从生命周期角度来说就是每一个新实例都是一个完整的生命周期
2、singleTask
从字面上理解就是单一任务也可以说是栈内复用模式,也就是说在要创建的activity时候使用此模式在栈中只允许存在一个实例,不管它是不是在栈顶,如果栈中不存在则创建新的实例,如果已存在则不重新创建打开已有实例并且栈内在此实例之上的其他实例将会全部出栈。并且会调用该实例的onNewIntent方法
当然在执行上述这些之前首先会查找taskAfinity指定的任务栈是不是存在,如果不存在则新创建,否则就像上述所讲的一样。
例如A1的启动模式设置为singletask,首先从A中启动A1再打开A2,从A2打开A1,这个时候任务栈中的情况就是A-A1,A2被移出栈了。
3、singleTop
栈顶复用模式,意思就是如果该实例就在栈顶则不重新创建实例,并且会调用onNewIntent方法。如果不在栈顶或者是不存在该实例则所有的实现和资源方式与standard一致。
4、singleInstance
顾名思义这是一种单例模式,全局唯一,并且使用此模式的实例会单独占用一个任务栈存在,只要是创建过,后续所有的请求都不会重新创建,除非这个特殊的任务栈被销毁了。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。