Activity是Android中最直观的展现,也有称之为界面。
一个正常的Activity需要满足:
- 依附的窗口(必选)
通常是继承自Activity,由父类来管理Activity,开发者只关心自己需要实现的效果 - 清单的声明(必选)
需要在AndroidManifest.xml中告诉系统存在某个Activity,这样当应用使用尝试使用某个Activity时,就可以轻易找到相应的类 - 细节的过滤(可选)
一个Activity告诉了系统自己的名字,但不是说任何人知道了自己的名字就可以随意访问自己,Android中采用IntentFilter来过滤哪些命令才是Activity自己关心的。
生命周期
扩展:Fragment作为3.0之后引入的一个概念,不属于四大组件,依附于Activity,一个Activity可以管理多个Fragment,这样就界面布局就可以做的更加灵活,每个小的模块只需要管理自己的部分就可以了。
Activity | Fragment | 二者对应关系 |
---|---|---|
Activity的一生 | Fragment的一生 | 二者的一生 |
LaunchMode
- Manifest文件中声明android:launchMode
模式 | 描述 |
---|---|
standard | 默认模式,每次启动Activity,就会创建一个新的Activity,然后push到任务栈中。 |
singleTop | 检查当前栈顶的Activity是不是要启动的Activity,如果是,则不会创建,如果不是,则同standard。 |
singleTask | 检查如果当前栈存在该Activity,则清除该栈以上的所有Activity,以此来达到显示该Activity到栈顶的目的,如果不存在,则同新起一个任务栈,将起放到栈底。 |
singleInstance | 该模式下的Activity会独享一个任务栈,(这个栈里只有这一个Activity,且在系统范围内共享该实例)即使多个应用启动这个Activity也都会共享着一个任务栈。 |
注:singleTop,singleTask,singleInstance如果是已存在的Activity,会调用其onNewIntent方法。(standard模式会重新创建所以也不需要)
配置方式:
- Intent启动的时候添加Flag
- FLAG_ACTIVITY_NEW_TASK
类似 singleTask - FLAG_ACTIVITY_SINGLE_TOP
类似 singleTop - FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_CLEAR_TOP 通常与FLAG_ACTIVITY_NEW_TASK 结合使用,找到其他任务中的现有 Activity,并将其放入可从中响应 Intent 的位置;如果指定 Activity 的启动模式为 "standard",则该 Activity 也会从堆栈中删除,并在其位置启动一个新实例,以便处理传入的 Intent。
处理关联
“关联”指示 Activity 优先属于哪个任务。默认情况下,同一应用中的所有 Activity 彼此关联。 因此,默认情况下,同一应用中的所有 Activity 优先位于相同任务中。
在不同应用中定义的 Activity 可以共享关联,或者可为在同一应用中定义的 Activity 分配不同的任务关联。
- taskAffinity
系统使用报名标识应用的默认任务关联。 - allowTaskReparenting
用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“true”表示可以移动,“false”表示它必须呆在当前应用的task中,默认值为false。
清理返回栈
如果用户长时间离开任务,则系统会清除所有 Activity 的任务,根任务除外。 当用户再次返回到任务时,仅恢复根 Activity。
- alwaysRetainTaskState
如果在任务的根 Activity 中将此属性设置为 "true",在很长一段时间后,任务仍将所有 Activity 保留在其堆栈中。 - clearTaskOnLaunch
如果在任务的根 Activity 中将此属性设置为 "true",则每当用户离开任务然后返回时,系统都会将堆栈清除到只剩下根 Activity。 - finishOnTaskLaunch
此属性类似于 clearTaskOnLaunch,但它对单个 Activity 起作用,而非整个任务。设置为 "true"时,Activity 仍是任务的一部分,但是仅限于当前会话。如果用户离开然后返回任务,则任务将不复存在。 - noHistory
具有此属性标识的Activity当导航到其他Activity上时,Activity栈将不记录。
额外:
关闭应用的方式
- 调用清空应用的所有Activity
Activity.finish - 杀死应用所在的进程
killprocess(Process.mId) - 终止正在运行的虚拟机
system.exit()
参考:
http://blog.csdn.net/card361401376/article/details/51542132
http://blog.csdn.net/way_ping_li/article/details/8680359
网友评论