Android群英传笔记-Activity
Activity
Activity是与用户交互的第一节课,它提供了一个用户完成指令的窗口。系统采用Activity栈的方式来管理Activity
Activity形态
Activity拥有多种形态,可以在多种形态之间切换,以此控制自己的生命周期。
- Activite/Runing:位于栈顶层,可见,正在与用户交互
- Paused:Activity失去焦点,被一个非全屏的activity或者透明的activity放置到栈顶时。只是失去了与用户的交互能力,所有的状态信息和成员变量都还被保持着,在系统内存极低的情况下,才被回收
- Stopped:一个Activity被另一个Activty完全覆盖。不可见,但是保存了状态信息和成员变量
- Killed:Activity被回收或者从没有被创建过。
Activity生命周期
onCreate,onStart,onResum,onPause,onStop,onDestroy。
其中,只有Resumed,Pused,和Stopped状态是稳定的, 其他都是过渡状态。
Activity启动与销毁
onCreate():创建ui基本元素
onPause()与onStop:清除Activity资源,避免浪费。
onDestroy():Activity引用会被销毁,但线程不会,所以要清除被开启的线程。
在Activity被销毁时,应该记得关闭广播,线程,甚至是map等等资源
Activity停止与恢复
从paused状态,部分不可见到可见,会再次调用onResum()方法
从Stopped状态,不可见到可见,会调用onStart()方法。
Activity重新创建过程
Activity被系统回收后,Activity的状态会通过onSaveInstanceState()保存在Bundle对象中,自己可以增加额外的键值对存入Bundle对象。
注意:finsh()操作(例如back返回),都不会保存状态。
https://blog.csdn.net/lixiang0522/article/details/7565401?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2
Android任务栈
简介
一个android App的功能会被拆为多个Activity,各个Activity通过Intent连接,安卓系统通过栈结构管理Activity,栈底元素就是整个任务栈的发起者。
当一个app启动,如果环境中不存在该app的任务栈,系统就会创建一个任务栈(Task),此后,这个app启动的Activity都会在这个任务栈中被管理(一般来说)。
注意:一个app的Activity一定都在同一个Activity中,一个任务栈中,Activity可能来自不同App。
AndroidMainfest 启动模式
- standard:默认启动模式,每次都会创建新的实例,在原来Activity之上。
- singleTop:如果栈顶是要创建的实例,则直接引用(会调用newIntent方法),否则创建新的实例。适合收到消息后,显示界面这种场景。
- singleTask:如果同一个任务栈有将要启动的Activity,则将这个Activity置于栈顶,之上的Activity全部销毁,否则新建一个activity。如果其他程序以singleTask启动这个Activity,则会新建一个任务栈。如果已经有后台的任务栈中含有这个Activity,则这个任务栈会被提到前台。
- singleInstance:声明singleInstance的Activity会出现在一个新得任务栈中,这个栈只有这么一个Activity。常用于与程序分离的界面,例如紧急呼叫。
注意:对于声明了singleTop或者singleInstance的Activity,它不能使用startActivityforResult()来启动其他Activity。因为默认不同Task之间,除了使用intent,是不能传输数据的。
intent Flag启动模式
上面是在mainfest文件中的设置Activity的启动方式,这里还有另外一种方式,就是intent flag
- intent.FLAG_ACTIVITY_NEW_TASK:这种方式启动的每一个Activity,都会在一个新的任务栈中。通常用在 service中启动Activity的场景,因为servive中不存在Activity的任务栈,需要新创建。
- FLAG_ACTIVITY_SINGLE_TOP:就是single top模式
- FLAG_ACTIVITY_CLEAR_TOP:就是single task模式
- FLAG_ACTIVITY_NO_HISTORY:这种模式启动其他Activity后,自己就消失了,不会保留在任务栈中。
清空任务栈
系统提供清空任务栈的方法帮助我们清空一整个Task,在mainfest文件,activity标签中·使用。
- clearTaskOnLaunch:每次返回该Activity时,都清空该Activity之上的所有Activity。
- finishOnTaskLaunch:与clearTaskOnLaunch类似,只是它是作用在自己身上,当离开这个Activity所在的任务栈,那么用户再返回时,这个Activity就会被finsh掉。
- alwaysRetainTaskLaunch:该Activity所在的Task将无视所有的清理命令,一直保持当前Task状态,免死金牌。