1.A-standard B-standard

A-B(在每一次跳转都是重新生成Activity时,上一个ActivityonSaveInstanceState都会被调用)

B-A

返回到B (因为是从A返回到B,并且B 1088254416还存在task里,所以onRestart被调用,-->onStart-->onResume

返回到A

返回 整个退出(AB都为standard的结果是所有的Activity都是重新生成的,因为互相跳转后都不在栈顶。

2.A-singleTop

A-A(因为还是启动ActivityA,并且task中存在又在栈顶,所以onResume直接被调用)

返回(整个退出)

这个模式在这个场景下比较有用,比如:如果有一个其他的应用想启动你的Activity(launch modesingleTop),而你当前的Activity正好在栈顶,那么就会调用到onNewIntent方法

3.A-standardB-singleTask

A-B

B-A

A-B (因为启动另外一个Activity,但是task中又存在,所以onRestart被调用,-->onStart-->onResume

返回到A

返回(整个退出)

当在调用到ActivityBonNewIntent时,之前的ActivityA调用了onDestory。也就是说,系统发现栈中存在ActivityB的实例时,ActivityAActivityB都弹栈了。

4.A-singleTask

A-A

返回(整个退出)

5.A-singleTask B-singleTask

A-B

B-AActivityA已经存在task中,所以ActivityA调用onNewIntent。又因为是从ActivityB跳到ActivityA,所以ActivityA调用onRestart-->onStart-->onResume。并且ActivityB弹栈,调用onDestroy

A-BActivityB已经onDestory,所以再次从ActivityAActivityBActivityB重新生成,onCreate-->onStart-->onResume。由于这个ActivityB是重新生成的,所以ActivityA就算launchModesingleTask,也不会弹栈调用onDestroy

返回到A

返回(整个退出)

------------------------------------------------------------------

A-singleTask B-singleTask

A-B

B-A

A-B

B-A

返回(整个退出)

6.A-singleTask B-singleInstance

A-B

B-A(除开每次跳转到新的Activity,上一个ActivityonSaveInstanceState会被调用;每次跳转到已经出现过的Activity,但因为切换了task,所以上一个ActivityonSaveInstanceState依然会被调用)

返回到B

返回(整个退出)

两个Activity是在不同的Task中,其次,当调用到onNewIntent时,ActivityB没有被Destroy,互不干涉。

A-singleTask B-singleInstance

A-B

B-A

A-B

返回到A

返回(整个退出)

7.A-singleTask B-singleInstanceC-standard

A-B

B-C

返回到A

返回到B

返回(整个退出)

刚进入应用,创建TaskAActivityA为栈顶,从ActivityAActivityBActivityB进入TaskB(如果再次进入ActivityB,则不创建Task,调用onNewIntent),此时TaskB中的ActivityB为栈顶,从ActitivyBActivityCActivityC为栈顶。

  一直按返回键,先从TaskA中依次将Activity弹出,然后再从TaskB中将ActiviyB弹出。ActiviyC->ActivityA->ActivityB

  这里分析一个问题,浏览器的LaunchModesingleTask,所以如果当你点击一个连接下载文件时(由一个activity来处理下载,launchmodestandard),如果再次进入浏览器,那么下载页面就被Destory了,那么这里我们可以把下载页面LaunchMode设置为singleInstance可以解决这个问题。