launchmode & clearTaskOnLaunch & finishOnTaskLaunch
2014-03-18 13:36
274 查看
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)
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)
相关文章推荐
- 监听home键(android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法)
- 设置android:clearTaskOnLaunch="true"属性对Activity行为的影响
- android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
- android:clearTaskOnLaunch="true"最白话的解释
- android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
- android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
- android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
- Android 监听home键(android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
- android Task Activity launchMode="singleTask" singleInstance 代码分析
- android:launchMode="singleTask" intent获取到的值没有更新
- android:clearTaskOnLaunch
- android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
- android:clearTaskOnLaunch的用法
- 设置android:clearTaskOnLaunch="true"属性对Activity行为的影响
- Activity的clearTaskOnLaunch属性
- 监听home键(android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法)
- Activity LaunchMode & TaskAffinity
- android属性之clearTaskOnLaunch
- android:finishOnTaskLaunch="true" //虽然这样设置了,但是Back键与Home键还是不同
- ”android:clearTaskOnLaunch=true“的作用