标签:
1.Task
2.Activity(不同Task下,相同Task下)和Task
Intent中还定义了flag属性(4个常量):
FLAG_ACTIVITY_NEW_TASK;
FLAG_ACTIVITY_CLEAR_TOP;
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED;
FLAG_ACTIVITY_SINGLE_TOP;
在<activity>标签中可以使用如下6个属性:
android:taskAffinity=""
android:launchMode=""
android:allowTaskReparenting=""
android:alwaysRetainTaskState=""
android:clearTaskOnLaunch=""
android:finishOnTaskLaunch=""
2.1 Task和Activity的亲属关系
默认情况下,一个应用程序内的所有Activity都有亲属关系(它所属的Task),且属于同一个Task。
亲属关系是指Activity所处的Task,某个Activity可以有多个”爸爸“(Task,前提是allowTaskReparenting设置为"true")
亲属关系起作用的前提:
a.Intent里包含了FLAG_ACTIVITY_NEW_TASK标志
带有这个Intent的Activity会去找它的亲属关系的”爸爸“(Task),找到了
就置于该Task的顶部,没有则创建新的Task
b.<activity>里allowTaskReparenting设置为"true".
当该Activity在不同的Task(该Task与Activity具有亲属关系)里被启动(呼唤)时,
该Activity可以在不同的Task(前提是该Task与Activity具有亲属关系)之间移动
修改亲属关系的方法:
<activity>里taskAffinity属性可以设置它的亲属关系(指定所属的Task)。
2.2 launchMode(启动模式)
该属性有四个值,分别为“standard”,“singleTop”,“singleTask”,“singleInstance”。它们决定了Activity的创建方式,以及如何响应intent的行为
“standard”/“singleTop”
共同点:
该模式的Activity可以实例化多次,并且每处理一个新的intent都会创建一个新的Activity来处理
(除了singTop的某种情况,如下)。standard为默认启动模式
不同点:
(对intent的处理方式):当仅当singleTop的Activity位于目标Task,且位于stack的顶部,
当一个intent发过来的时候,它不会创建新的实例,而是调用它的onNewIntent()方法里处理该Intent。
“singleTask”/“singleInstance”
共同点:只能有一个实例,且总是位于stack的底部。
不同点(对intent的处理方式):
singleTask的Activity只可以允许“standard”,“singleTop”的Activity进入它的Task里。
它处理intent的方式是,只有它位于stack的顶部时才调用onNewIntent()方法处理该Intent,不在顶部时则丢弃
而“singleInstance”的Activity不允许其他的Activity进入它的Task里,所以它既是位于
stack的底部,也位于stack的顶部,因此只能intent到来时只能由它处理(调用onNewIntent()方法)。
2.3 清除堆栈
默认情况下,当用户离开一个应用程序较长时间时,系统就会将Task的所有Activity清除,
除了根Activity,既只保留初始的Activity。当然你可以通过以下属性的修改来改变。
clearTaskOnLaunch:一旦用户离开应用程序再次返回时,系统会清除所有的Activity除
了根Activity。
alwaysRetainTaskState:保留Task的状态,即所有的Activity都不会被清除。
finishOnTaskLaunch:可以用在所有的Activity上,不局限于根Activity,true表示一旦
用户离开了task,则该Activity就不存在。
标签:
原文地址:http://www.cnblogs.com/beyondbycyx/p/4334013.html