一.返回栈
Android中是使用Task(任务)来管理活动的,一个任务就是一组存放在栈里面的集合,这个栈就称为返回栈,
又栈是一种后进先出的数据结构,每当启动一个新活动的时候,都会进入返回栈的栈顶,而当我们按下Back键或者调用finish()方法销毁活动时,处于栈顶的元素会先出栈,之前进入的活动就会处于栈顶位置,系统总是将处于栈顶的活动展示给用户
二.活动状态
每个活动在其生命周期中最多可能会有四种状态
1.运行状态:当一个活动处于栈顶位置时,这个活动就处于运行状态
2.暂停状态:当一个活动不再处于栈顶位置,但任然可见,这个活动就进入了暂停状态,但是活动都不在栈顶了,为什么任然可见呢?因为并不是每个活动都要占据整个屏幕,比如对话框形式的活动只会占据屏幕的一部分,处于暂停状态的活动任然是完全存活的,系统不会愿意去回收这类活动
3.停止状态:当一个活动不处于栈顶位置且不可见时,这个活动就处于暂停状态,系统任然会为这种活动保存相应的状态和成员变量,但是这是不可靠的,当其他地方需要内存时,处于暂停状态的活动有可能被系统回收
4.销毁状态:活动从返回栈中移除后就变成了销毁状态,系统会回收销毁状态的活动,以保证内存的充足
二,活动的生存期
Activity类中定义了七个回调方法,覆盖了活动生命周期的每一个环节
1.onCreate() :每个活动我们都重写了onCreate() 这个方法,他会在活动第一次创建的时候被调用,我们应该在这个方法中完成初始化,加载布局一类的操作
2.onStart() :这个方法在活动由不可见变为可见时候调用
3.onResume() :这个方法在活动准备和用户进行交互的时候调用,此时活动一定处于返回栈的栈顶,且处于运行状态
4.onPause() :当另一个方法启动时调用
5.onStop() :活动完全不可见时调用
6.onDestroy() :这个方法在活动被销毁前调用,之后活动的状态变为销毁状态
7.onRestart() :这个方法在活动由停止状态(onStop)重新变为运行状态时调用,也就是活动被重新启动了
活动生命周期图
实例来解释各个方法的用途
首先创建一个ActivityLifeCycle项目,主活动和布局分别为MianActivity和activity_main.xml
MainActivity MainActivity再创建两个子活动,分别为NormalAvtivity和DialogActivity(对话框形式),在main_activity里定义两个按钮用于对另外两个活动的跳转
activity_normal布局文件 activity_dialog布局文件 配置对话框主题配置对话框时报错,把DialogActivity的父类继承改为Activity而不是AppCompatActivity
再刚创建主活动且执行的时候
onCreate(),onStart(),onResume()三个方法均会执行,当点击第一个按钮到NormalActiivty时,由于NormalActiivty会把MainActivity完全遮挡住,因此onPause() , onStop()方法都会执行,然后按下Back键返回主活动,onRestart(),onStart,onResume() 三个方法会重新执行,而onCreate()方法不会再执行了,因为活动并没有再次创建
再点击第二个按钮,启动DialogActivity(对话框活动),回执行onPause()方法,onStop()方法并没有执行,因为DialogActivity活动没有完全遮住主活动,再按Back键返回主活动也只有Resume()方法执行,再按Back键退出主活动,会依次执行onPause(),onStop(),onDestroy()方法,最终销毁MainActivity
其实可以理解为onPause()暂停 和 onResume() 继续 是一对 ,onStop()停止 和onRestart() 重新开始是一对,在有别的活动启动之后和按Back返回之后都会执行对应的方法
网友评论