一、配置Activity
只要为 <application... /> 元素添加 <activity.../> 子元素即可配置 Activity。
配置 Activity 通常指定如下几个属性:
name :指定该 Activity 的实现类的类名。
icon :指定该 Activity 对应的图标。
label :指定该 Activity 的标签。
exported :指定该 Activity 是否允许被其他应用程序调用。
launchMode :指定该 Activity 的加载模式。支持4种加载模式——
standard
singleTop
singleTask
singleInstance
此外,配置 Activity 时通常还需要指定一个或多个 <intent-filter ... /> 元素,用于指定该 Activity 可响应的 Intent。
二、启动 关闭 Activity
Activity 启动其他 Activity 有如下两个方法:
startActivity(Intent intent) :启动其他Activity。
startActivityForResult(Intent intent, intrequestCode) :以指定的请求码(requestCode)启动 Activity,并获取返回值(需重写
onActivityResult(..) 方法)。
关闭 Activity 的两个方法:
finish() :结束当前的 Activity 。
finishActivity(int requestCode) :结束以startActivityForResult() 方法启动的 Activity。
三、Activity生命周期
归纳起来 Activity 大致会经过如下4个状态:
· 活动状态:即运行状态。当前 Activity 位于前台,用户可见,可获得焦点。
· 暂停状态:其他 Activity 位于前台,该 Activity 依然可见,但不能获得焦点。
· 停止状态:该 Activity 不可见,失去焦点。
· 销毁状态:该 Activity 结束,或其所在的 Dalvik 进程被结束。
Activity 生命周期及回调方法:
如上图,在 Activity 的生命周期中,如下方法会被系统回调:
· onCreate(Bundle savedStatus) :创建 Activity 时被回调,只会被回调一次。
· onStart() :启动 Activity 时被回调。
· onRestart() :重新启动 Activity 时被回调。
· onResume() :恢复 Activity 时被回调。该方法在 onStart() 后一定被回调。
· onPause() :暂停 Activity 时被回调。
· onStop() :停止 Activity 时被回调。
· onDestroy() :销毁 Activity 时被回调。该方法只会被回调一次。
四、Android对 Activity 的管理:
Android 采用 Task 来管理多个Activity。当我们启动一个应用时,Android 就会为之创建一个 Task,然后启动这个应用的入口 Activity(即<intent-filter.../> 中配置为 MAIN 和 LAUNCHER 的 Activity)。
调用 Activity 的 getTaskId() 方法可获取它所在的 Task 的ID。
Task 可以理解成 Activity 栈,也就是说 Task 以栈的形式来管理Activity:先启动的 Activity 被放在 Task 栈底,后启动的 Activity 被放在 Task 栈顶。
Activity 的加载模式就负责管理实例化、加载Activity 的方式,并可控制 Activity 与 Task 之间的加载关系。
配置 Activity 时可指定 android:launchMode 属性,用以设定该 Activity 的加载模式。
该属性支持如下4个属性值:
standard :标准模式。(默认)
以此模式启动时,Android 会为目标 Activity 创建一个新的实例,并将该 Activity 添加到当前 Task 栈中——这种模式不会启动新的 Task,新 Activity 将被添加到原有的 Task 中。
singleTop :Task 顶单例模式。
该模式与 standard 模式近似,不同在于如果目标 Activity 已经位于 Task 栈顶时,系统会直接利用已有的 Activity;而如果目标 Activity 没有位于 Task 栈顶,则会重新创建目标 Activity 的实例并将之加载到 Task 栈顶。
singleTask :Task 内单例模式。
此模式的 Activity 在同一 Task 内只允许存在一个实例。具体分如下三种情况:
目标 Activity 不存在 Task 栈内,系统将创建目标 Activity 的实例并将之加入栈顶。
目标 Activity 已位于 Task 栈顶,系统直接复用该 Activity。
目标 Activity 已存在,但没位于 Task 栈顶,系统将会把位于该 Activity 上方所有 Activity 移出 Task 栈,从而使目标 Activity 转入栈顶
。
singleInstance :全局单例模式。
此模式下系统会保证无论从哪个 Task 中启动目标 Activity,只会创建一个目标 Activity 的实例,并会使用一个全新的 Task 栈来装载该Activity 实例。具体分如下两种情况:
目标 Activity 不存在 Task 栈内,系统会先创建一个全新的 Task,再创建目标 Activity 的实例,并将之加入新 Task 的栈顶。
目标 Activity 已存在,无论它位于哪个应用程序中,无论它位于哪个 Task 中,系统将会把该 Activity 所在的 Task 转到前台,从而使目标Activity 显示出来。
注:采用该模式,加载 Activity 总是位于 Task 栈顶,而加载 Activity 所在 Task 只包含该 Activity。