activity的四种启动模式分别是:
1、Standard 标准
2、SingleTop 顶部复用
3、SingleTask 栈内复用
4、SingleInstance 单例模式
首先要了解一个概念:任务栈
它是专门用来存放Activity的栈,每一次使用startActivity方法创建的Activity实例,都会被存放在这里统一管理。这个Task栈遵循“先进后出”原则,每一次我们按下back键,都会先销毁栈顶的Activity。
然后再来谈谈标准启动模式 Standard
在AndroidManifest文件中,我们需要对每一个Activity配置启动模式,如果我们没有手动配置,那么这个Activity将会按照默认的标准启动模式来启动。
在这种模式下,不论任务栈中是否已经存在过该Activity的实例,都会产生一个新的实例压入栈中。要注意的是,新产生的实例被压入哪个任务栈,取决于调用startActivity方法的Activity属于哪个任务栈。简单地说就是:Activity A属于1号任务栈,此时在A中调用startActivity(Activity B),那么此时Activity B被启动之后,也会被压入一号任务栈。
这也就是为什么在Application和Service中不能直接启动Activity的原因,因为它们没有对应的任务栈,所以会导致程序报错而崩溃。所以如果要在Application或Service中启动Activity,要注意添加FLAG_ACTIVITY_NEW_TASK标记。