一.Activity生命周期
1.activity的4种状态
running(处于activity栈顶的状态,活动状态)/paused(失去焦点,被一个非全屏的activity占据,用户操作屏幕,没反应)/stopped(这个Activity被另外一个完全覆盖,这个被覆盖的处于这个状态,是不可见的)/killed(被系统回收)
2.activity生命周期的分析
activity启动的时候,——》onCreate()——》onStart()——》onResume()
点击Home键回到主界面(Activityb不可见的时候)--->onPause()---->onStop()
当我们再次回到原Activity界面时候---->onRestart()-->onStart()---->onResume()
退出当前Activitys时候 --->onPause()---->onStop()--->onDestory()
- (1) onCreate():表示Activity 正在创建,这是生命周期的第一个方法,可以做一些初始化操作,比如调用setContentView加载布局,初始化Acitivity所需的数据等。
- (2) onRestart():表示Activity 正在重新启动。当前Acitivity从不可见重新变为可见状态时会调用onRestart方法。比如按Home键切换到桌面或者打开一个新的Activity,当前Actyvity就会暂停,也就onPause和onStop被执行,再回到这个Activity就会出现这种情况。
- (3) onStart():表示Activity正在被启动,已经可见,但还没有出现在前台,还无法和用户交互。
- (4) onResume():表示Activity已经可见了,并且在前台开始活动。注意:onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。
- (5) onPause():表示Activity 正在停止,正常情况下,紧接着onStop就会被调用。此时可以做一些存储数据、停止动画等操作,不能太耗时,否则会影响新的Activity的显示,onPause必须先执行完,新Activity的onResume才会执行。
- (6)onStop:表示Activity***即将停止*,可以做一些稍微重量级的回收工作,同样不能太耗时。
- (7)onDestroy:表示Activity即将被销毁,这是Activity生命周期的最后一个回调,可以做一些回收和最终的资源释放。
3.android进程优先级
前台/可见/服务/后台/空
4.android 任务栈
- (1) android任务栈又称为Task,它是一个栈结构,具有后进先出的特性,用于存放我们的Activity组件。
- (2) 我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,因此一个任务栈包含了一个activity的集合, android系统可以通过Task有序地管理每个activity,并决定哪个Activity与用户进行交互:只有在任务栈栈顶的activity才可以跟用户进行交互。
- (3)在我们退出应用程序时,必须把所有的任务栈中所有的activity清除出栈时,任务栈才会被销毁。当然任务栈也可以移动到后台, 并且保留了每一个activity的状态. 可以有序的给用户列出它们的任务, 同时也不会丢失Activity的状态信息。
- (4)需要注意的是,一个App中可能不止一个任务栈,某些特殊情况下,单独一个Actvity可以独享一个任务栈。还有一点就是一个Task中的Actvity可以来自不同的App,同一个App的Activity也可能不在一个Task中。
5.Activity启动模式
standard
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。例如:
若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果我点击按钮,便会新启一个Activity A1叠在刚才的A1之上,再点击,又会再新启一个在它之上……
点back键会依照栈顺序依次退出。
singleTop
可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。singleTask
只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。