Activity 任务栈 taskAffinity 用法

taskAffinity属性 

taskAffinity 是 Activity 的一个重要属性,主要用于任务栈管理,通常和singleTask和allowTaskReparenting配合使用;

taskAffinity 主要作用:

1. 任务栈分配:
- 默认情况下,同一应用的 Activity 共享同一个任务栈
- 通过 taskAffinity 可以为 Activity 指定不同的任务栈
- 任务栈名称默认为应用的包名

2. 常见使用场景:







3. 使用注意事项:

1. 必须与 launchMode 或 Intent.FLAG_ACTIVITY_NEW_TASK 配合使用
2. 任务栈名称必须包含包名中的点号
3. 不同任务栈的 Activity 数据传递需要特殊处理
4. 会影响返回栈行为
5. 需要考虑内存管理问题
4. 主要应用场景:

1. 多模块应用任务栈隔离
2. 特殊页面独立任务栈
3. 多账户应用场景
4. 应用间跳转管理

allowTaskReparenting 属性 

1. 具体作用:
- 允许 Activity 在运行时从一个 Task 转移到另一个 Task
- 通常发生在原 Activity 所属的应用被启动时 

2. 示例:

// 场景:应用 A 启动了应用 B 的 ActivityB
// ActivityB 配置了 allowTaskReparenting="true"

// 1. 初始状态
Task A (前台):
- ActivityA (应用A)
- ActivityB (应用B) // 此时在应用A的Task中

// 2. 用户按 Home,然后启动应用B
Task A (后台):
- ActivityA (应用A)

Task B (前台):
- ActivityB (应用B) // 自动转移到应用B的Task中

3. 常见应用场景:
- 浏览器打开的网页
- 社交分享功能
- 应用间跳转
- 推送消息打开的页面

4. 注意事项:

// 1. Task 亲和性要匹配


// 2. 生命周期影响
@Override
protected void onTaskReparented(Intent intent) {
    super.onTaskReparented(intent);
    // Activity 迁移到新 Task 时回调
}

5. 使用建议:
- 谨慎使用,可能影响用户体验
- 考虑返回栈的完整性
- 注意数据传递的问题
- 处理好生命周期回调 

你可能感兴趣的:(面试专栏,android)