TaskAffinit属性详解
来源:互联网 发布:nginx第三方模块下载 编辑:程序博客网 时间:2024/06/13 21:25
该属性用来指定Activity应该在哪个Task中(Activity与Task的吸附关系)。
一般情况:下在同一个App中,所启 动的Activity都是在同一个Task中的,这里你可以想为何都是在同一个Task中?会不会不在同一个Task中?Activity和Task之间究竟有什么联系?
解决这些问题的关键在于每个Activity的taskAffinity属性。
每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task。如果一个Activity没有显式的指明该 Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity,如果 Application也没有指明,那么该taskAffinity的值就等于包名。而Task也有自己的affinity属性,它的值等于它的根 Activity的taskAffinity的值。
一开始,创建的Activity都会在创建它的Task中,并且大部分都在这里度过了它的整个生命。然而有一些情况,创建的Activity会被分配其它 的Task中去,有的甚至,本来在一个Task中,之后出现了转移。我们首先分析一下android文档给我们介绍的两种情况。
第一种情况》》如果该Activity的allowTaskReparenting设置为true,它进入后台,当一个和它有相同affinity的Task进入前台时,它会重新宿主,进入到该前台的task中。
验证以下这种情况。
APP
ActivitytaskAffinityallowTaskReparentingApp1Activity1aaatrueApp2Activity2aaafalse
我们创建两个工程,App1和App2,分别含有Activity1和Activity2,它们的taskAffinity相同,Activity1的allowTaskReparenting为true。
首先,我们启动App1,加载Activity1,然后按Home键,进入后台。然后启动App2,加载Activity2。
现象:本来应该是显示Activity2,却看到了Activity1。实际上Activity2也被加载了,只是Activity1重新宿主,所以看到了Activity1。
第二种情况》》如果加载某个Activity的intent,Flag被设置成FLAG_ACTIVITY_NEW_TASK时,它会首先检查是否存在与自 己taskAffinity相同的Task,如果存在,那么它会直接宿主到该Task中,如果不存在则重新创建Task。
App1:AndroidManifest.xml 在SecondActivity节点 中设置了taskAffinity 然后在MainActivity.java中通过点击Button的事件来打开SecondActivity: 注意的是在Intent中设置:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity" android:taskAffinity="aaa.aaa"> </activity>
App2:直接给MainActivity设置taskAffinity
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:taskAffinity="aaa.aaa"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
App1和App2的taskAffinity是相同的,首先打开App2 》按HOME》 接着打开App1》点击打开SecondActivity 》按返回
现象分析:
进入Activity的顺序为Activity2->Activity1,而返回时顺序为 Activity1->MyActivity。这就说明了一个问题,Activity1在启动时,重新宿主到了MyActivity所在的Task 中去了。
以上是验证了文档中提出的两种TaskAffinity的用法
- TaskAffinit属性详解
- 属性详解
- Marquee标签属性详解
- 。CSS属性详解
- Marquee属性详解
- 详解spring事务属性
- CSS属性详解
- 详解spring事务属性
- 详解spring事务属性
- 详解spring事务属性
- Struts2 属性详解
- 详解spring事务属性
- JavaBean详解-属性
- scrollbar属性、样式详解
- CSS滤镜属性详解
- CSS滤镜属性详解
- 详解spring事务属性
- 详解spring事务属性
- 作业、进程、管程概念区别
- json数据格式
- 空结构体struct{}解析
- 微信小程序 js动态给前台元素绑定事件
- 高性能IO模型浅析
- TaskAffinit属性详解
- 移动平台对 META 标签的定义
- 解决:ClassCastException: org.springframework.util.LinkedCaseInsensi
- Python 基础——range() 与 np.arange()
- 多输入路径MapReduce完整代码详解
- NP 和P问题
- 随手记
- leetcode 557. Reverse Words in a String III
- C内存对齐