1.Standard
- 1.在不指定Activity的启动模式时,系统默认使用该模式启动activity。
- 2.每次启动activity,系统都会重新创建一个新的实例,放到activity栈的栈顶。非常消耗资源。
- 3.Activity每次被创建 他的onCreate onStart onResume都会被依次调用。
2.SingleTop
- 1.当前栈中已有该activity的实例并且该实例位于栈顶时,不再新建实例,并且会将intent对象传入回调onNewIntent方法;
- 2.当前栈中已有该activity的实例但该实例不在栈顶时,它跟Standard的启动模式一样,还是会创建一个新的实例放到栈中;
- 3.当前栈中不存在该activity的实例时,跟standard的启动模式一样。
在我的一些项目中 该启动模式主要用于防止重复点击,或一些不用重复点击的页面,如:IM聊天页,推送打开后的Activity等。
3.SingleTask
- 首先会根据taskAffinity去寻找当前是否存在一个对应名字的任务栈
- 2.如果不存在,创建一个新的task任务栈,然后创建该activity实例加入任务栈中。
- 3.如果存在,则找到该任务栈,查找该任务栈中是否存在该activity实例,如果存在,将其上方所有的activity出栈也就是销毁。在平时使用中,我们甚至可以将不同的app当中的activity设置成相同的taskAffinity,这样你虽然在两个不同的应用当中,但你两个应用的activity会被分配到同一个task任务栈中。
应用场景一般用在应用的主界面,
4.SingleInstance
- 1.以SingleInstance模式启动的Activity具有全局唯一性。
- 2.如果在启动这样的activity时,已经存在了一个实例,他会把该activity所在的任务调到前台,不断复用。
- 3.以SingleInstance模式启动的Activity具有独占性。他会独自占有一个任务栈。这个任务栈中只有他一个实例。
应用场景 呼叫来电