Android Activity 启动模式

当应用运行Activity实例创建后会被放在一个线程的任务栈中,根据Activity的启动模式不同,被创建的实例会有区别,假设有A、B两个Activity,A为启动Activity,设定A的启动模式:

standard(默认标准启动)

打开应用,任务栈task中有一个A的实例a1,此时再从A-startActivity-A,会在task中创建一个新的实例a2,此时再从Aa2-startActivity-B,会创建B实例,按返回键会回到A-a2,再返回会到A-a1,再返回会退出应用。


singleTop

打开应用,任务栈task中有一个A的实例a1,此时若想从A-startActivity-A,不管点击多少次都不会创建新的实例,因为此时A的实例a1在栈顶,若按返回则会退出应用。

打开应用,任务栈task中有一个A的实例a1,从A-startActivity-B,再从B-startActivity-A,由于此时A的实例不在栈顶,会创建一个新的A实例a2。按返回会到B,再返回会到A的a1,再返回则退出。


singleTask

打开应用,任务栈task中有一个A的实例a1,此时若想从A-startActivity-A,不管点击多少次都不会创建新的实例,按返回则退出。从A-startActivity-B,再从B-startActivity-A,会复用A的实例a1,并且将B的实例移除出栈,即销毁掉。按返回会退出应用。在这种模式下被销毁的只有实例a1上方的其他Activity实例。

比如我们把B作为启动Activity且为默认启动模式,A的模式为singleTask。我们打开程序,首先是B-b1,然后从B-startActivity-A,创建一个a1实例,再A-startActivity-B,会创建b2,再从B-startActivity-A,会重新使用a1实例并销毁b2。此时任务栈中最低层是b1,上面是a1。按返回会到B,再返回退出应用。


singleInstance

打开应用,任务栈task1中有一个A的实例a1,该任务栈只会有一个实例,此时若想从A-startActivity-A是不会创建新实例的。A-startActivity-B,会创建新的任务栈task2和B的实例b1,按返回会回到task1-a1,再返回退出应用。若从B-startActivity-A,会复用task1-a1,按返回会到b1,再返回退出应用。

打开应用,任务栈task1中有一个A的实例a1,A-startActivity-B,创建新的任务栈task2和B的实例b1,再B-startActivity-B,在任务栈task2中创建B的实例b2,此时再B-startActivity-A,复用task1-a1,按返回到b2,按返回会到b1,再返回退出应用。



 

posted @ 2016-11-17 22:07  changchou  阅读(126)  评论(0编辑  收藏  举报