栈的特色为先进后出android
Android使用task来管理Activity。一个task就是一组放在栈里的Activity的集合。这个栈也叫作返回栈(Back Stack)spa
系统老是会显示处于栈顶的Activity给用户.net
2.1 运行状态:位于栈顶,可见,系统不回收3d
2.2 暂停状态:不位于栈顶,可见。内存极低时才回收。blog
打开了一个非全屏或者是透明的Activity。例如,打开了一个对话框形式的Activity。可使当前Activity进入到暂停状态生命周期
2.3 中止状态:不位于栈顶,不可见。其余地方须要内存时会回收内存
2.4 销毁状态:从返回栈中移除,系统回收,释放内存。资源
onCreate():Activity第一次被建立时调用,在此方法中完成初始化的操做get
onStart():Activity由不可见变为可见时调用it
onResume():Activity准备好与用户进行交互时调用
onPause():系统准确去启动或者是恢复另外一个活动时调用
onStop():Activity彻底不可见的时候调用
onDestroy():Activity被销毁时调用
onRestart():Activity由中止状态变成运行状态以前调用
Activity的前台生存期,主要是在onResume和onPause之间
Activity的可见周期为:onStart、onResume、onPause、onStop之间
Activity的完整的生命周期为:onCreate、onStart、onResume、onPause、onStop、onDestroy
A刚启动时:
A启动B时:
B位于栈顶时,点击返回键:
在上面的截图中能够看出,A启动B时,会先执行A的onPause方法,因此为了屏幕过分的天然,给用户一个比较好的体验,建议onPause方法中不要执行一些耗时的操做。
在onStop方法调用以前会调用onSaveInstanceState(Bundle outState)方法。将所须要保存的数据存储到参数bundle中
能够在onCreate(@Nullable Bundle savedInstanceState)和onRestoreInstanceState(Bundle savedInstanceState)方法里,从参数Bundle 中获取已经保存的数据。若是Activity第一次建立时,onCreate方法的参数为空。可是调用了onRestoreInstanceState方法,那么参数确定不会为空。
关于保存和恢复View层次结构,系统工做遵循的是一种委托思想:上层委托下层,父元素委托子元素去进行处理。
当系统配置改变,致使Activity被回收,能够经过配置android:configChanges属性,让Activity不被杀死。可是依然会调用onConfigurationChanged(Configuration newConfig)方法。例如横竖屏发生改变的时候,为了防止Activity被回收从新建立,设置:android:configChanges="orientation"