1、返回栈(Back Stack)
栈的特点为先进后出
Android使用task来管理Activity。一个task就是一组放在栈里的Activity的集合。这个栈也叫做返回栈(Back Stack)
系统总是会显示处于栈顶的Activity给用户
2、Activity状态
2.1 运行状态:位于栈顶,可见,系统不回收
2.2 暂停状态:不位于栈顶,可见。内存极低时才回收。
打开了一个非全屏或者是透明的Activity。例如,打开了一个对话框形式的Activity。可以使当前Activity进入到暂停状态
2.3 停止状态:不位于栈顶,不可见。其他地方需要内存时会回收
2.4 销毁状态:从返回栈中移除,系统回收,释放内存。
3、生命周期
3.1 涉及到的具体的方法
onCreate():Activity第一次被创建时调用,在此方法中完成初始化的操作
onStart():Activity由不可见变为可见时调用
onResume():Activity准备好与用户进行交互时调用
onPause():系统准确去启动或者是恢复另一个活动时调用
onStop():Activity完全不可见的时候调用
onDestroy():Activity被销毁时调用
onRestart():Activity由停止状态变成运行状态之前调用
3.2 图表表示
3.2.1 完整的生命周期
3.2.2 所有的生命周期
3.3 文字解释
Activity的前台生存期,主要是在onResume和onPause之间
Activity的可见周期为:onStart、onResume、onPause、onStop之间
Activity的完整的生命周期为:onCreate、onStart、onResume、onPause、onStop、onDestroy
4、Activity A启动B生命周期为
A刚启动时:
A启动B时:
B位于栈顶时,点击返回键:
在上面的截图中可以看出,A启动B时,会先执行A的onPause方法,所以为了屏幕过度的自然,给用户一个比较好的体验,建议onPause方法中不要执行一些耗时的操作。
5、Activity资源被回收的时候,生命周期
在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"