WEB开发网
开发学院手机开发Android 开发 Android 开发之活动与任务 阅读

Android 开发之活动与任务

 2010-04-20 05:18:00 来源:WEB开发网   
核心提示:栈中包含对象,因此如果一个活动(再次说明:活动是Activity的子类)启动了多个实例——例如多个地图查看器,Android 开发之活动与任务(2),则栈对每个实例有一个独立的入口,(可以这样理解:假设有四个活动以这样的顺序排在栈中——A-B-C-D,定义在不同应用程序中的活动能够共享亲和度,同一个应用程序中的活动可以

栈中包含对象,因此如果一个活动(再次说明:活动是Activity的子类)启动了多个实例——例如多个地图查看器,则栈对每个实例有一个独立的入口。(可以这样理解:假设有四个活动以这样的顺序排在栈中——A-B-C-D,现在又有一个C的实例,则栈变成A-B-C-D-C,这两个C的实例是独立的。)栈中的活动从不会被重新排列,只会被压入、弹出。这点很好理解,因为活动的调用顺序是固定的。

任务是一栈的活动,而不是清单文件中声明的某个类或元素,因此无法独立于它的活动为任务赋值。整个任务的值是在栈底活动(根活动)设置的。例如,下节将讨论的“任务亲和度”,亲和度信息就是从任务的根活动中获取的。

一个任务的所有活动作为一个整体运行。整个任务(整个活动栈)可置于前台或发送到后台。例如,假设当前任务有四个活动在栈中——三个活动在当前活动下面。用户按下HOME键,切换到程序启动器,并选择一个新的应用程序(实际上是一个新的任务)。当前任务进入后台,新任务的根活动将显示。接着,过了一会,用户回到主屏幕并再次选择之前的应用程序(之前的任务)。那个任务栈中的所有四个活动都变为前台运行。当用户按下返回键时,不是离开当前任务回到之前任务的根活动。相反,栈顶的活动被移除且栈中的下一个活动将显示。

上面所描述的是活动和任务的默认行为,但是有方法来改变所有这些行为。活动与任务之间的联系及任务中活动的行为,是由启动活动的Intent对象的标志(flags)和清单文件中活动元素的属性共同决定的。

在这方面,主要的Intent标志有:

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

FLAG_ACTIVITY_SINGLE_TOP

主要的属性有:

taskAffinity

launchMode

allowTaskReparenting

clearTaskOnLaunch

alwaysRetainTaskState

finishOnTaskLaunch

接下来的小节将讨论这些标志和属性的作用,他们怎么交互,及使用的注意事项。

2、亲和度和新任务(Affinities and new tasks)

默认情况下,一个应用程序的所有活动互相之间都有一个亲和度(affinity)——也就是说,他们属于同一个任务的偏好(preference)。然而,也可以通过元素的taskAffinity属性为每个活动设置个体亲和度。定义在不同应用程序中的活动能够共享亲和度,同一个应用程序中的活动可以分配不一样的亲和度。亲和度发挥作用的两种情况:1)启动活动的Intent对象包含FLAG_ACTIVITY_NEW_TASK标志时;2)一个活动的allowTaskReparenting属性为"true"时。

上一页  1 2 3 4 5  下一页

Tags:Android 开发 活动

编辑录入:coldstar [复制链接] [打 印]
赞助商链接