launchmode & clearTaskOnLaunch & finishOnTaskLaunch

来源:互联网 发布:c语言源代码实例 编辑:程序博客网 时间:2024/06/15 04:00

1. launchmode

standard

默认值,Activity会依次入栈出栈,相同activity可以存在多个实例,加入依次启动A->B->C->D->C->A->A,则栈中为A B C D C A A,按返回键依次返回。

 
singleTop
standard模式基础上增加一条规则:如果Activit在栈顶,则只能存在一个实例。如果A 已经在栈顶,再次startActivity A时,不会创建新的实例,返回栈顶A。
假如当前栈为 A B C D C A,如果再次startActivity A,返回栈顶A,栈还是 A B C D C A。


singleTask
栈中将会只有一个该Activity实例。
例如:现在栈的情况为:A B C D。B的Launch mode为singleTask,此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。

1. singleTask  Activity 不一定在栈底,可以是任何位置。
2. 再次启动时,返回task中的实例,并清除之上的activity。


singleInstance
独自占有一个task。栈底,并且只有一个activity。


2. clearTaskOnLaunch & finishOnTaskLaunch


clearTaskOnLaunch
 该属性task任何activity有效。
 假如依次启动里A->B->C, task为 A B C。
 当进入后台,假如A 设置了clearTaskOnLaunch,再次点启动A的时候,则会销毁B、C。假如B 设置了clearTaskOnLaunch,再次点启动B的时候,也会销毁B、C。
 即:task进入后台,再次从设置了clearTaskOnLaunch的activity进入task,会销毁除根Activity外的其他Activity,显示根activity

 (1)有效情况:再次启动A(设置clearTaskOnLaunch)的时候,会销毁除根activity外的其他activity。
 例如A、B、C属于同一个应用程序,桌面有一个入口A,当从桌面再次启动A的时候,会销毁B、C,显示A。如果A 没有设置clearTaskOnLaunch,则显示的时C,即栈顶Activity。
 桌面有一个入口B并设置了设置了clearTaskOnLaunch,当从桌面再次启动B的时候,也会销毁B、C,显示A。如果B 没有设置clearTaskOnLaunch,则显示的时C,即栈顶Activity。

 (2)按home键后,从近期任务进入,显示的还是栈顶Activity(C)


finishOnTaskLaunch
 该属性task任何activity有效,对task根activity无效。

 当进入后台,再次点启动该task的时候,会销毁设置了finishOnTaskLaunch的activity
 即:task进入后台,只要再次进入该task,不管从A、B、C进入task,只要该task中的activity设置了finishOnTaskLaunch,就会销毁,根activity除外。

 (1)有效情况:从A、B、C进入task,都可以

 (2)按home键后,从近期任务进入,显示的还是栈顶Activity(C)
 
0 0
原创粉丝点击