Activity的LaunchMode

1.A-standard B-standard


144723435.png

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


144723521.png

B-A


144723232.png

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


144723338.png

返回到A


144723945.png

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


2.A-singleTop

144755194.png

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


144755366.png

返回(整个退出)


144755550.png

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


3.A-standardB-singleTask


144755870.png

A-B


144755432.png

B-A


144934927.png

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

144934829.png

返回到A


144934557.png

返回(整个退出)


144934408.png

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


4.A-singleTask


144934525.png

A-A


144952888.png

返回(整个退出)


144952599.png

5.A-singleTask B-singleTask


144952987.png

A-B


144952683.png

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


144953408.png

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






145010423.png

返回到A


145010207.png

返回(整个退出)


145010751.png

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

A-singleTask B-singleTask


145010913.png

A-B


145010664.png

B-A


145029220.png

A-B


145029417.png

B-A


145029464.png

返回(整个退出)


145029494.png

6.A-singleTask B-singleInstance


145029930.png

A-B


145046877.png

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


145046225.png

返回到B


145046238.png

返回(整个退出)


145046538.png

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

A-singleTask B-singleInstance


145046504.png

A-B


145323730.png

B-A


145323999.png

A-B


145323564.png

返回到A


145323279.png

返回(整个退出)

145323255.png

7.A-singleTask B-singleInstanceC-standard


145323508.png

A-B


145323572.png

B-C


145509475.png

返回到A


145325147.png

返回到B


145325102.png

返回(整个退出)


145325304.png

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


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


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



你可能感兴趣的:(launchMode,Acticity)