前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 应用开发】Activity 任务亲和性 taskAffinity 设置 ( taskAffinity 属性 )

【Android 应用开发】Activity 任务亲和性 taskAffinity 设置 ( taskAffinity 属性 )

作者头像
韩曙亮
发布2023-03-27 17:44:56
9590
发布2023-03-27 17:44:56
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

I . 任务亲和性 ( taskAffinity ) 简介

代码语言:txt
复制
        - [II . 任务亲和性 ( taskAffinity ) 设置](https://cloud.tencent.com/developer)
        - [III . 任务亲和性 ( taskAffinity ) 与 FLAG\_ACTIVITY\_NEW\_TASK 标记](https://cloud.tencent.com/developer)
        - [IV . 任务亲和性 ( taskAffinity ) 与 android:allowTaskReparenting 属性](https://cloud.tencent.com/developer)
I . 任务亲和性 ( taskAffinity ) 简介

任务亲和性 ( taskAffinity ) 简介 :

① 亲和性概念 : 任务亲和性 ( taskAffinity ) 是 Activity 的属性 , 用于设置该 Activity 倾向于哪个任务 ;

关于任务的概念参考 : 【Android 应用开发】Android 返回堆栈 与 任务

② 任务亲和性 ( taskAffinity ) 属性值 : 该值是软件包的 包名 , 定义在 AndroidManifest.xml 或 build.gradle 配置文件 中 ;

( 如 : “com.android.example” )

代码语言:javascript
复制
<activity android:name=".MainActivity"
          android:launchMode="standard"
          android:taskAffinity="com.android.example"/>

③ 任务亲和性 ( taskAffinity ) 设置效果 : 具有相同的 任务亲和性 ( taskAffinity ) 属性的 Activity , 会倾向于放在同一个任务 ( 返回堆栈 ) 中 ;

II . 任务亲和性 ( taskAffinity ) 设置

1 . Activity 默认的 任务亲和性 ( taskAffinity ) 属性 : 如果开发者没有指定该 Activity 的 taskAffinity 属性 , 那么该值默认就是该应用的包名 ;

2 . 任务亲和性的三种情况 :

① 相同应用 , 相同的亲和性 ( 默认状态 ) : 相同的应用会默认其 Activity 具有相同的亲和性 , 其属性值就是 本身应用的 包名 , 默认设置下 , 每个打开的 Activity 界面都放在同一个 任务 ( 返回堆栈 ) 中 ;

② 相同应用 , 不同的亲和性 : 如果在同一个应用中 , 为 某个 Activity 设置了不同的亲和性 , 那么打开这个 Activity 界面时 , 就会在其它的任务中打开该界面 ;

③ 不同应用 , 相同的亲和性 : 如果其它应用 Activity 界面的亲和性 属性就是本应用的包名 , 那么打开该 Activity 界面时 , 该界面就会放入本应用的 返回堆栈中 ;

3 . 注意事项 : 如果要设置 任务亲和性 ( taskAffinity ) 属性 , 该值不能是应用的默认包名 , 只能设置其它的包名 ;

( 即 : 如果设置亲和性属性 , 那么就要设置成不一样的 , 默认的就不要再显示的设置一遍了 ; )

III . 任务亲和性 ( taskAffinity ) 与 FLAG_ACTIVITY_NEW_TASK 标记

1 . 讨论的前提条件 :

① 应用 A : 开发了 应用 A , 其中有界面 Activity A ;

② 应用 B : 开发了 应用 B , 其中有界面 Activity B ( 设置默认的亲和性 ) ;

2 . 界面跳转 ( 目的界面为默认启动模式 )

在 任务 A 中的 Activity A 调用 startActivity() 方法跳转界面 Activity B ( standard 默认启动模式 ) 时 , 新启动的 Activity B 界面 默认 会放到 任务 A 的返回堆栈 A 中 ;

3 . 界面跳转 ( 目的界面为 singleTask 启动模式 )

在 任务 A 中的 Activity A 调用 startActivity() 方法跳转界面 Activity B ( singleTask 启动模式 ) 时 , 新启动的 Activity B 的归属 , 即放在哪个 任务中 , 分以下两种情况 :

① 如果 当前 应用 B 没有运行 : 那么会创建一个新的 任务 , 将 Activity B 界面放入该新任务的返回堆栈中 ;

② 如果 当前 应用 B 的 任务 B 处于后台 : 那么会将 任务 B 激活 到前台运行 , 并将 Activity B 放入 任务 B 的返回堆栈栈顶 ;

IV . 任务亲和性 ( taskAffinity ) 与 android:allowTaskReparenting 属性

1 . 下面讨论 android:allowTaskReparenting 属性 设置为 true 的情况 :

代码语言:javascript
复制
<activity android:name=".ActivityA"
          android:launchMode="standard"
          android:taskAffinity="com.android.exampleA"
          android:allowTaskReparenting="true"/>

2 . android:allowTaskReparenting 属性作用 :

① 任务 A : 当有一个任务 A , 与 Activity A 有亲和性 ;

② 任务 B : 当前 Activity A 处于 任务 B 的返回堆栈中 , Activity A 界面是在 任务 B 中启动的 ;

③ 设置属性为 true 的结果 : 当任务 A 进入了前台运行 , Activity A 就会转移到 任务 A 的返回堆栈中 ;

3 . 举例说明 :

① 应用 A : 开发了 应用 A , 其中有界面 Activity A1 ;

② 应用 B : 开发了 应用 B ;

③ 动作 1 : 在 应用 B 中启动了 Activity A1 , 此时 Activity A1 是放在 应用 B 的 任务 B 中 , 即 返回堆栈 B ;

④ 动作 2 : 如果此时启动 应用 A , 即 应用 A 的 任务 A 进入了前台运行 , 则 处于 任务 B 中的 Activity A1 会转移到 任务 A 中运行 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
    • I . 任务亲和性 ( taskAffinity ) 简介
      • II . 任务亲和性 ( taskAffinity ) 设置
        • III . 任务亲和性 ( taskAffinity ) 与 FLAG_ACTIVITY_NEW_TASK 标记
          • IV . 任务亲和性 ( taskAffinity ) 与 android:allowTaskReparenting 属性
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档