TaskAffinity属性对应用程序任务栈和启动行为的影响

开发 前端
taskAffinity和allowTaskReparenting这两个属性会一起使用,实现将一个应用程序的Activity移动到另一个应用程序的任务(Task)中的功能。

TaskAffinity是Activity的一个属性,用于指定Activity所属的任务栈(Task Stack)。TaskAffinity可以翻译为“任务相关性”或“任务亲和性”,标识了一个Activity所需要的任务栈的名字。

主要作用:

  1. 指定任务栈的名称:TaskAffinity属性可以指定一个字符串,用于标识任务栈的名称。不同的Activity可以使用相同的任务栈名称来指定它们属于同一个任务栈,从而在同一个任务栈中进行活动切换。
  2. 控制Activity的启动行为:TaskAffinity属性还可以影响Activity的启动行为,对于实现特定的导航和界面流程非常有用。例如,当TaskAffinity和singleTask启动模式配对使用时,待启动的Activity会运行在名字和TaskAffinity相同的任务栈中。
  3. 实现Activity的迁移:TaskAffinity通常与allowTaskReparenting属性一起使用,用于实现把一个应用程序的Activity移到另一个应用程序的Task中。allowTaskReparenting属性用于配置是否允许Activity更换从属Task。

TaskAffinity属性的值必须是一个字符串,且中间必须含有包名分隔符“.”。如果一个Activity没有显式地指定TaskAffinity,那么TaskAffinity属性就等于Application指明的TaskAffinity;如果Application也没有指明,那么TaskAffinity的值就等于应用的包名。

启动新的Task:

Intent intent = new Intent(this,IntentTimeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

当AMS发现启动了一个FLAG_ACTIVITY_NEW_TASK标签的Activity时,会先去寻找当前是否存在这个Activity的task值,如果不存在的话,就会创建该task,如果存在就省去了创建 task这个步骤,然后在把要启动的Activity添加到task中。AMS分配的taskId是线性递增的,每次开启一个新的task,taskId进行+1的操作。

「allowTaskReparenting」是Activity的一个属性,用于配置是否允许该Activity更换从属的任务(Task)。当一个Activity设置了allowTaskReparenting属性,并且值为true时,该Activity可以从其启动的任务(Task)移动到由taskAffinity属性指定的任务(Task)中。如果allowTaskReparenting的值为false(默认值),Activity将保持在其启动的任务(Task)中,并在那里耗尽其整个生命周期。

<activity 
    android:name=".MainActivity"
    android:allowTaskReparenting="true"/>

taskAffinity和allowTaskReparenting这两个属性会一起使用,实现将一个应用程序的Activity移动到另一个应用程序的任务(Task)中的功能。例如,当需要在多个应用程序之间共享某些Activity时。

责任编辑:武晓燕 来源: 沐雨花飞蝶
相关推荐

2020-09-24 10:14:27

云计算云原生数据

2014-07-14 17:35:29

Activity

2010-08-12 16:10:44

Flex应用程序

2023-09-01 00:05:40

2024-05-21 12:45:55

2011-02-24 12:20:32

2011-03-17 15:01:14

一次性试用品应用程序忠实用户

2011-09-01 10:23:14

2020-02-14 13:17:36

任务管理器Windows 10应用程序

2024-03-22 11:40:40

Node.jsNodeCRUD

2021-04-08 08:06:55

SAP应用程序攻击

2010-08-10 15:26:38

Flex应用程序

2021-11-24 09:00:00

云计算开发应用

2024-09-23 17:01:10

2024-06-24 10:53:23

2010-12-13 11:40:17

Android应用程序

2020-08-25 14:03:20

应用程序屏蔽应用程序内保护网络攻击

2011-11-03 09:41:35

Android签名安全性

2022-08-03 08:21:16

FindexLinux应用程序

2019-07-21 07:46:46

应用安全恶意软件漏洞
点赞
收藏

51CTO技术栈公众号