Android taskAffinity研究

1. taskAffinity和singleTask,singleInstance

taskAffinity 是用来指示 Activity 属于哪一个 Task 的,默认情况下 Activity 的 taskAffinity 是包名。在代码设置方式为:

        <activity
            android:name=".SecondActivity"
            android:launchMode="singleTask"
            android:taskAffinity="com.test.SecondActivity">
        </activity>

一般情况下 taskAffinity 的使用配合 Activity 的启动模式 LaunchMode 来一起使用。

singleTask

默认情况下,在一个 app 中的所有 Activity 都有一样的 taskAffinity。当一个应用程序加载一个 singleTask 模式的 Activity 时,首先该 Activity 会检查是否存在与它的 taskAffinity 相同的 Task。

  1. 如果存在,那么检查是否实例化,如果已经实例化,那么销毁在该Activity 以上的 Activity 并调用 onNewIntent 。如果没有实例化,那么该Activity实例化并入栈。
  2. 如果不存在,那么就重新创建 Task,并入栈。

如果启动的 thisActivity 是 singleTask 模式的话,在它上面再次启动 otherActivity 的话,则 otherActivity 所在的 Task 是 thisActivity 所在的 Task

以上图例表示:存在三个 Activity,FirstActivity ,SecondActivity 和 ThirdActivity。其中 SecondActivity 设置了 singleTask 以及和其他两个 Activity 不同的 taskAffinity。他们的跳转流向为:

FirstActivity ——-> SecondActivity ——-> ThirdActivity

singleInstance
  1. 当一个应用程序加载一个 singleInstance 模式的 Activity 时,如果该 Activity 没有被实例化,那么就重新创建一个 Task,并入栈,如果已经被实例化,那么就调用该 Activity 的 onNewIntent ;
  2. singleInstance的 thisActivity 所在的 Task 不允许存在其他Activity,任何从该 thisActivity 加载的 otherActiivty 都会被放入其它的 Task 中,如果存在与 otherActiivty 相同 affinity 的 Task,则在该 Task 内创建 otherActiivty。如果不存在,则重新生成新的 Task 并入栈。

如果启动的 thisActivity 是 singleInstance 模式的话,在它上面再次启动 otherActivity 的话,则 otherActivity 所在的 Task 不在是thisActivity 所在的 Task ,singleInstance的Activity所在的Task不允许存在其他Activity

以上图例表示:存在三个 Activity,FirstActivity ,SecondActivity 和 ThirdActivity。其中 SecondActivity 设置了 singleInstance 以及和其他两个 Activity 不同的 taskAffinity。他们的跳转流向为:

FirstActivity ——-> SecondActivity ——-> ThirdActivity

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值