详解Activity4种启动模式

本文详细解析了Android中Activity的四种启动模式:standard标准模式、SingleTop单一栈顶模式、SingleTask单一任务模式及SingleInstance单一实例模式。通过具体示例介绍了每种模式的特点和应用场景,并说明了如何在代码中配置这些模式。
摘要由CSDN通过智能技术生成

三,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"
/>

 

相关文章:

彻底明白Activity启动模式-SingleTop、SingleTask、SingleInstance具体使用场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值