在android里,有4种activity的启动模式,分别为: standard, singleTop, singleTask和singleInstance, 其中standard和singleTop相似, singleTask和singleInstance相似, 用法以下:android
(1).standard和singleTopspa
这两种加载模式下, 同一个task中能够存在一个activity的多个实例, 而且能够位于activity栈的任意位置。it
先举个例子:程序
假设目标task的activity栈为: A->B->C->D(栈底->栈顶)方法
在程序中调用startActivity(D) activity
若是D是standard模式, 则activity栈变为:vi
A->B->C->D->D, 也就是会从新建立一个D实例co
若是D是singleTop模式, 则activity栈变为:background
A->B->C->D, 不会建立D实例, 就是说若是D在目标task 的activity栈的栈顶, 则不会建立新的实例, 而是调用D的onNewIntent()方法, 反之若是D不在目标task 的activity栈的栈顶, 则会从新建立一个D实例实例
(2). singleTask和singleInstance
这两种加载模式下, 同一个task中只会存在一个activity的实例, 若是经过startActivity()启动,则调用onNewIntent()方法, 而不是建立一个新的实例。这两种模式下, activity实例均位于activity栈的栈底。
这两种加载模式的区别:
假设一个Activity的实例A 采用以下两种加载模式:
singleTask:
若是A调用startActivity(B)启动B实例, 则A和B位于同一个task中。
singleInstance:
若是A调用startActivity(B)启动B实例, 则系统会自动给intent添加一个属性FLAG_ACTIVITY_NEW_TASK, 将B实例放入到一个新的task中, 也就是说A实例所在的task中只能有A本身, 不能存在其余实例