launchMode:
1.standard
如果启动该Activity的context是Activity,则新建一个Activity实例,该target Activity在source Activity的Task中。如果启动改Activity的context不是Activity,则新建一个Activity实例,并创建一个新的TaskRecord。
2.singleTop
如果启动该Activity的是Activity,那么看target Activity所在的Task的Top Activity是否与targetActivity同一类型,如果是同一类型,则调用Top Activity的onNewIntent(Intent),如果是不同类型,则创建一个target Activity实例放到Task顶部,并调用器onCreate()方法。这个模式下,Activity实例不是进程唯一,也不是Task唯一,而是指定Task的Top Activity类型唯一。当然Top Activity如果是pause状态,则在调用onNewIntent()前,将会调用onResume();
3.singleTask
在进程中只有一个实例。如果启动该Activity的是Activity,且两个Activity是同一应用,且target Activity没有声明taskAffinity属性,则target Activity与sourceActivity在同一task。sourceActivity 所在Task没有Target Activity类型的实例,则创建一个。source Activity所在Task存在一个target Activity类型的实例,则弹出其上的Activity,如下图:
如果ActivityB和Activity A不是在同一个应用定义的,那么ActivityB将在新的Task中。如果Activity B和Activity A是同一应用的,但是ActivityB声明了taskAffinity,那么ActivityB将在声明的task中,如果声明的task已存在,那么就去到那个task,如果不存在,则创建一个。如下图: