onCreate:
create表示创建,这是
Activity生命周期的第一个方法,也是我们在
android开发中接触的最多的生命周期方法。它本身的作用是进行
Activity的一些初始化工作,比如使用
setContentView`加载布局,对一些控件和变量进行初始化等。但也有很多人将很多与初始化无关的代码放在这,其实这是不规范的。
此时Activity
还在后台,不可见。所以动画不应该在这里初始化,因为看不到……onStart
:start
表示启动,这是Activity
生命周期的第二个方法。
此时Activity
已经可见了,但是还没出现在前台,我们还看不到,无法与Activity
交互。其实将Activity
的初始化工作放在这也没有什么问题,放在onCreate
中是由于官方推荐的以及我们开发的习惯。onResume
:resume
表示继续、重新开始,这名字和它的职责也相同。此时Activity
经过前两个阶段的初始化已经蓄势待发。
Activity
在这个阶段已经出现在前台并且可见了。这个阶段可以打开独占设备onPause
:pause
表示暂停,当Activity
要跳到另一个Activity
或应用正常退出时都会执行这个方法。紧接着onStop方法
就会被调用,我们可以进行一些轻量级的存储数据和去初始化的工作,不能太耗时,因为在跳转Activity
时只有当一个Activity
执行完了onPause
方法后另一个Activity
才会启动,
android
中指定如果onPause
在500ms即0.5秒内没有执行完毕的话就会强制关闭Activity
。
**从生命周期图中发现可以在这快速重启,但这种情况其实很罕见,比如用户切到下一个Activity
的途中按back
键快速得切回来。onStop
:stop
表示停止,此时Activity
已经不可见了,但是Activity
对象还在内存中,没有被销毁。这个阶段的主要工作也是做一些资源的回收工作。onDestroy
:destroy
表示毁灭,这个阶段Activity
被销毁,不可见,我们可以将还没释放的资源释放,以及进行一些回收工作。onRestart
:restart
表示重新开始,Activity
在这时可见,当用户按Home
键切换到桌面后又切回来或者从后一个Activity
切回前一个Activity
就会触发这个方法。这里一般不做什么操作。Android 完整生命周期:
onCreate –> onContentChanged –> onStart –> onPostCreate –> onResume –> onPostResume –> onPause –> onStop –> onDestroy
onContentChanged
onContentChanged()
是Activity
中的一个回调方法 当Activity
的布局改动时,即setContentView()
或者addContentView()
方法执行完毕时就会调用该方法, 例如,Activity
中各种View
的findViewById()
方法都可以放到该方法中。
onPostCreate
与onPostResume
onPostCreate
方法是指onCreate
方法彻底执行完毕的回调,系统做最后的初始化操作,onPostResume
类似,这两个方法官方说法是一般不会重写。
现在知道的做法也就只有在使用ActionBarDrawerToggle
的使用在onPostCreate
需要在屏幕旋转时候等同步下状态,Google官方提供的一些实例就是如下做法:
@Overrideprotected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();}
onCreate
方法只在Activity
创建时执行一次,而onStart
方法在Activity
的切换以及按Home
键返回桌面再切回应用的过程中被多次调用。因此Bundle
数据的恢复在onStart
中进行比onCreate
中执行更合适。onCreate
能做的事onStart
其实都能做,但是onstart
能做的事onCreate
却未必适合做。onStart
方法中Activity
可见但不在前台,不可交互,而在onResume
中在前台。onStart
方法中主要还是进行初始化工作,而onResume
方法,根据官方的建议,可以做开启动画和独占设备的操作。onPause
时Activity
可见,onStop
时Activity
不可见,但Activity
对象还在内存中。onStop
方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause
中进行,但要注意不能太耗时。onStop
阶段Activity
还没有被销毁,对象还在内存中,此时可以通过切换Activity
再次回到该Activity
,而onDestroy
阶段Acivity
被销毁
Activity
或多或少会占有系统资源,而在官方的建议中,onPause
方法将会释放掉很多系统资源,为切换Activity
提供流畅性的保障,而不需要再等多两个阶段,这样做切换更快。Activity
的过程中再次切回原Activity
,是在onPause
方法后直接调用onResume
方法的,这样onPause→onStop→onRestart→onStart→onResume
要快得多。当targetSdkVersion
小于3时onSaveInstanceState
是在onPause
方法中调用的,而大于3时是在onStop
方法中调用的。而onRestoreInstanceState
是在onStart
之后、onResume
之前调用的**
Activity
被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用;Activity
跳转到其他Activity
或者按Home键回到主屏,自身退居后台时,此方法会被调用。第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity
,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个View
组件的状态。onSaveInstanceState
的调用顺序是在onStop
中调用。
Activity
被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity
,此方法会被调用;onRestoreInstanceState
的调用顺序是在onStart
之后;