三,Activity的启动模式
Intent的标志位FLAG:
1,Intent.FLAG_ACTIVITY_SINGLE_TOP 与加载模式singleTop功能相同
2, Intent.FLAG_ACTIVITY_CLEAR_TOP
如果已经启动了四个Activity:A,B,C和D。在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里的intent里添加flags标记,如下所示: 销毁目标Activity和它之上的所有Activity,重新创建目标Activity
3,Intent.FLAG_ACTIVITY_NEW_TASK
具有这个标志的Activity启动时,在同一个任务栈中所以位于它上面的Activity都要出栈,一般会和singleTask模式一起出现
关于标记,可参考下面文章:
Android 关闭多个视图Intent.FLAG_ACTIVITY_CLEAR_TOP用法
Activity采用的是栈的数据结构来管理活动(activity的中文名字)的.
(一),standard,标准模式.
1,每启动一个activity,就会创建一个新的对象.
2,比如ActivityA跳转到ActivityA,再跳转到ActivityA,接连两次,这个时候要按3次Back键,才能退出程序.
(二),SingleTop,单一栈顶模式.
1,每启动一个activity,就会创建一个新的对象.但若是这个Activity处于栈顶,就不会再创建新的对象,而是复用该对象.
2,比如:ActivityA跳转到ActivityA,在跳转到到ActivityA,按1次Back键就推出程序了.因为此时栈里面就只有一个对象ActivityA,
3,再比如:ctivityA跳转到ActivityB,在跳转到到ActivityA.这个时候要按3次Back键,才能退出程序.
这是因为在启动ActivityB的时候,栈顶活动就变成了ActivityB,再次启动ActivityA,就会创建新的ActivityA对象,那这个栈中就有3个对象,2个ActivityA,1个ActivityB.
4,使用场景:通知,浏览器的书签
(三),SingleTask,单一任务模式.
1,每启动一个activity,就会创建一个新的对象.但若是这个栈中有了该对象,就不会再创建新的对象,而是复用该对象.并把该活动之上的所有活动清除出栈.
2,比如:ctivityA跳转到ActivityB,在跳转到到ActivityA.这个时候要按1次Back键,就能退出程序.
这是因为ctivityA跳转到ActivityB时,这个时候ctivityA跳转到ActivityB位于栈顶;再次启动ActivityA时候,栈中已经有ActivityA,那就会复用ActivityA,并将ActivityB清理出栈.这个时候栈中就剩下1个ActivityA.
3,使用场景:浏览器的主界面
代码中设置SingleTask模式:
(四)SingleInstance,单一实例模式.
1,每启动一个Activity,就会新建一个栈来管理这个Activity.
<activity android:name=".ActivityB"
android:launchMode="singleInstance"/>
2,比如:
将ActtivityB放在一个独立的栈中
ActivityA跳转到ActivityB,在跳转到到ActivityC.
首先按返回键,就会返回ActivityA界面,
再按返回键,才会返回ActivityB,
最后,按返回键,就会退出程序.
这是因为ActivityB单独处于一个栈中,ActivityA和ActivityC处于一个栈中.
3, 使用场景:来电界面
五,taskAffinity,任务相关性
1,这个参数标识了一个Activity所在的栈的名字,
2,默认情况下,所有Activity所在的栈的名字为应用的包名.
3,每个Activity都可以单独指定taskAffinity属性,这个指定的属性值,不能和包名一直,否则就相当于没指定.
4,taskAffinity主要和singleTask启动模式或者allowTaskResparenting配对使用,在其他情况下没意义.
<activity
android:taskAffinity="com.ryg.task1"
android:name=".ActivityA"
android:launchMode="singleTask"/>
相关文章: