掌握activity的生命周期对app的流畅至关重要。可以让我们在合理管理应用资源方面发挥得游刃有余,并让app拥有更好得用户体验。
本篇主要介绍Activity的生命周期及其相关应用。
- 生命周期流程图
- 四种活动状态
- activity的生存期
- 异常情况下activity的生命周期
- Activity与Fragment,menu调用顺序
生命周期流程图:
四种活动状态:
活动状态 | 特点 | 回收情况 |
---|---|---|
运行状态 | 处于栈顶 | 最不愿意回收 |
暂停状态 | 不处于栈顶但仍然可见 | 内存极低的情况,系统才会回收 |
停止状态 | 不处于栈顶且完全不可见 | 其他地方需要内存时,有可能被回收 |
销毁状态 | 从返回栈移除 | 系统最喜欢回收 |
activity的生存期:
7个回调方法:
-
onCreate():活动启动的第一个环节,
可在该方法中完成初始化操作。
- onStart():活动由不可见变为可见的时候调用。
- onResume():活动准备和用户进行交互的时候调用。此时活动一定处于栈顶。
-
onPause():系统准备去启动或恢复另一个活动的时候调用。
通常在这个方法中将一些消耗cpu的资源释放掉,以及保存一些关键数据,但执行速度要快,从而保证新activity的显示。
-
onStop():活动完全不可见的时候调用。
与onPause()区别在于如果活动部分可见时,onPause()会得到调用,但onStop()不会。比如对话框。
- onDestroy():活动销毁前调用。
- onRestart():由停止状态变为运行状态之前调用,也就是活动重新启动时。由onStop()->onStart()。
3个生存期:
- 完整生存期: onCreate()和onDestory()之间。一般onCreate()完成初始化动作,onDestroy()完成释放内存工作。
-
可见生存期:onStart()和onStop()之间。
通过这两个方法合理管理对用户可见的资源。比如在onStart()对可见资源进行加载,而在onStop()对这些资源进行释放,从而保证停止状态的活动不会占用太多的资源。
- 前台生存期:onResume()和onStop()之间,此时的活动时和用户交互的。
异常情况下的生命周期:
系统资源配置发生改变或系统内存不足时,activity可能被杀死。
-
资源配置:
如当前activity由竖屏转换成横屏,activity就会被销毁并且重新创建。
此种情况系统会调用onSaveInstance来保存当前activity的状态,这个方法在OnStop之前,与onPause没有时序关系。会将保存的数据作为Bundle对象传递给onRestoreInstanceState和onCreate()方法。
同时,在onSaveInstanceState和onRestoreInstanceState方法中,系统自动为我们做了一些恢复工作,如:文本框(EditeText)中用户输入的数据,ListView滚动的位置等,这些view相关的状态系统都能够默认为我们恢复。
Activity与Fragment生命周期关系:
-
创建过程:
-
销毁过程:
Activity与menu创建的顺序:
onResume后创建Menu,回调onCreateOptionMenu
参考:
《第一行代码》
Android四大组件