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

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

文章目录

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

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

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

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



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


任务亲和性 ( taskAffinity ) 简介 :



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


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



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

( 如 : “com.android.example” )


<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 的情况 :


<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 中运行 ;


目录
相关文章
|
3天前
|
数据库 Android开发
Android 通过升级SettingsProvider数据强制覆盖用户的设置项
Android 通过升级SettingsProvider数据强制覆盖用户的设置项 【5月更文挑战第7天】
20 5
|
8天前
|
XML Java Android开发
利用Bundle实现Android Activity间消息的传递
利用Bundle实现Android Activity间消息的传递
15 2
|
6天前
|
数据可视化 开发工具 Android开发
102 【我们】安卓小应用开发
102 【我们】安卓小应用开发
14 0
|
7天前
|
Shell Android开发
Android设置语言
Android设置语言
13 1
|
8天前
|
缓存 安全 Java
Android中的persistent属性
Android中的persistent属性
10 2
|
8天前
|
Android开发
Android android:exported="true" 属性
Android android:exported="true" 属性
9 0
|
8天前
|
存储 消息中间件 缓存
Android应用开发:实现自定义View的高效绘制
【5月更文挑战第12天】 在Android开发中,创建高性能的自定义视图是一项挑战,它要求开发者深入理解Android的绘图机制以及UI渲染过程。本文将探讨如何优化自定义View的绘制流程,减少不必要的重绘和布局计算,以提升应用的响应速度和流畅度。我们将介绍几种关键策略,包括利用硬件加速、缓存绘制内容和使用高效的数据结构来存储视图状态。通过实例分析和性能对比,读者将学会如何在自己的应用中运用这些技巧,从而打造出更加流畅和响应迅速的用户界面。
|
8天前
|
Android开发 数据库管理
Android如何在Activity和Service之间传递数据
Android如何在Activity和Service之间传递数据
13 3
|
8天前
|
Java Android开发
Android开发--Intent-filter属性详解
Android开发--Intent-filter属性详解
12 0
|
8天前
|
Shell Android开发
Android Activity重写dump方法实现通过adb调试代码
Android Activity重写dump方法实现通过adb调试代码
17 0