Activity的启动模式详细解释

来源:互联网 发布:数据库设计er图 编辑:程序博客网 时间:2024/06/08 08:54

Activity的启动模式详细解释
Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。
(1).standard(默认):Activity的默认加载方法。即使某个要启动的Activity在Task栈中已经存在,同样会新创建一个实例压入栈中。也就是说:该模式的Activity,只要是启动,都会创建一个新的实例压入栈中。
例如:
现在栈的情况为:A B C D。在D这个Activity中通过Intent跳转到D本身,那么现在的栈情况为: A B C D D 。
此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D D C B A将会依次弹出栈而显示在界面上。如下图所示:
这里写图片描述
(2).singleTop模式:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时:再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。如果该Activity不位于栈顶的时候,通过Intent跳转到本身这个Activity,则会创建一个新的实例压入栈中。
例如:
现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。如下图:
这里写图片描述
(3).singleTask模式:如果某个Activity是singleTask模式,那么Task栈中将会只有一个该Activity的实例。该Activity之上的所有的Activity实例都将会被销毁。
例如:现在栈的情况为:A B C D。B的Launch mode为singleTask,此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。如下图:
这里写图片描述
(4).singleInstance模式:将Activity压入一个新建的任务栈中。也就是说:将要被启动的新的Activity将会被压入一个新建的任务栈中。
例如:Task栈1的情况为:A B C。C通过Intent跳转到D,而D的Launch mode为singleInstance,则将会新建一个Task栈2。此时Task栈1的情况还是为:A B C。Task栈2的情况为:D。此时屏幕界面显示D的内容,如果这时D又通过Intent跳转到D,则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。而如果D跳转到C,则栈1的情况变成了:A B C C,因为C的Launch mode为standard,此时如果再按返回键,则栈1变成:A B C。也就是说现在界面还显示C的内容,不是D。如下图:
这里写图片描述
注:
singleTask模式和singleInstance模式区别:
singleTask模式的activity允许其他activity成为task中的一部分 ,并且它通常在task栈的根部,其它activity(必须是standard模式和singleTop模式的activity)可以加载到这个栈上。另一方面,singleInstance模式的activity不允许任何其它activity加载到这个task栈上。它是这个task中唯一的activity。如果它启动另一个activity,那个activity会被指引到不同的task中,这个行为就像在intent中用FLAG_ACTIVITY_NEW_TASK标记一样。
(通常来说,manifest中用singleTask启动模式和在intent中用FLAG_ACTIVITY_NEW_TASK标记的行为是一样的)。
总的来说:singleTask模式可以允许和别的Activity在一个栈中。在它之上的Activity都将会被销毁。而singleInstance模式的Activity是单独在一个Task中。

3 2
原创粉丝点击