刚刚入门安卓的学习,我发现Android的活动是可以层叠的。我们每启动一个新的活动,就会覆盖在原活动之上。然后按返回键会退出最上面的活动,下面的活动就会重新显示出来。
一、返回栈
经过深入了解,发现安卓系统是通过Task来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称为返回栈。在默认情况下,每当启动一个新的活动,它会在返回栈中入栈,当按下返回键或调用finish()方法,处于栈顶的活动会出栈。此外,系统总会显示处于栈顶的活动给用户
二、活动的4中状态
-
运行态
当一个活动位于返回栈的栈顶,这时的活动就处于运行态。 -
暂停态
当一个活动不再处于栈顶,但是仍然可见的状态。因为并不是每个活动都会占据整个屏幕,比如可以以对话框的形式占用一小块区域,这种暂停态的活动依旧是完全存活的。 -
停止态
当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了 停止状态。但是系统依旧会为这种活动保存相应的状态和成员变量,但是这并不是可靠的,当其他地方需要内存,这种状态的活动可能会被回收。 -
销毁态
当一个活动从返回栈中移除后的状态。
三、七个生命周期的方法
Activity类中定义了7个回调方法,设计活动生命周期的每一个环节。
-
onCreate():
这方法会在活动首次被创建的时候调用,在这个方法中应该完成活动的初始化的操作,比如加载布局、绑定事件等等。 -
onStart():
活动由不可见变为可见的时候调用。 -
onResume():
这个方法在活动准备好和用户进行交互时进行交互时使用。此时的活动一定位于返回栈的栈顶。 -
onPause():
这个方法在系统准备去启动或恢复另一个活动时调用,此时将当前活动给暂停掉。系统会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但是这个方法的执行速度一定要快,否则会影响行的栈顶活动的使用。 -
onStop():
调用这个方法会使得活动完全不可见。所以,如果即将启动的新活动是一个对话框的活动,那么原活动执行onPause方法后不会执行onStop。 -
onDestory():
这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。 -
onRestart():
这个方法在活动由停止状态变成运行状态前调用。
以上方法除了onRestart,两两相对,将活动分为三个生存期:
- 完整生存期: onCreate和onStop之间的经历。
- 可见生存期: onStart和onStop之间的经历。期间,活动对用户总是可见的,即便有可能无法和用户进行交互。在onStart中对资源进行加载,在onStop中对资源进行释放。
- 前台生存期:在onResume和onPause之间的经历。期间活动总是处于运行状态的,此时的活动是可以和用户进行交互的。
-