正常情况下activity的生命周期
- onCreate: Activity正在被创建,通常在里面做一些初始化的工作。
- onReStart: Activity正在重新启动,当当前Activity从不可见变为可见状态的时候,onRestart会被调用,比如从当前Activity跳转到一个新的Activity,或者是按下home键回到桌面,再回到当前Activity时onReStart会被调用。(如果跳转到一个透明主题的Activity再回来不会调用onRestart方法,会直接调用onResume方法,因为当前Activity没有stop)
- onStart:Activity正在被启动,此时Activity已经可见了,但是还没有出现在前台。
- onResume:Activity已经可见了,并且已经出现在前台并开始活动。(onStart和onResume对比:两者都表示Activity已经可见了,但是onStart的时候Activity还在后台只有调用了onResume只后Activity才会出现在前台)
- onPause:Activity暂停,可以在里面做一些数据储存、停止动画的操作,但是不能执行耗时操作,因为只有onPause执行完新的Activity才会被创建。
- onStop:Activity停止,可以做一些重量级的回收工作,同样不能太耗时。
- onDestroy:Activity被销毁,这是Activity中的最后一个回调,可以在里面做一些回收工作和最终的资源释放。
一个Activity第一次启动的生命周期:onCreate->onStart->onResume。
当用户打开新的Activity或者切换到桌面的时候:onPause->onStop。
当用户打开一个透明主题的Acyivity的时候:只调用onPause不会调用onStop。
当用户再次回到原Activity的时候:onRestart->onStart->onResume.
当用户按back键回退的时候:onPause->onStop->onDestroy.
在整个生命周期中onCreate和onDestroy是一对,分别代表Activity的创建和销毁,并且只可能被调用一次。onStart和onStop是一对,分别代表Activity的可见和不可见,随着用户的操作可能被多次调用。onResume和onPause是一对,分别代表Activity是否在前台,随着用户的操作同样可能被多次调用。
当启动一个新的Activity的时候就的Activity的onPause会先执行,然后才会启动新的Activity。
异常情况下activity的生命周期
当资源相关的系统配置发生改变时导致Activity被销毁并重新创建
当资源内存不足时可导致低优先级的Activity被销毁
当Activity被异常销毁的时候,其onPause、onStop、onDestroy均会被调用,同时系统会调用Activity的onSaveInstanceState来保存当前的Activity状态。这个方法的调用时在onStop之前,当Activity被重新创建时,系统会调用onRestoreInstanceState,把Activity销毁时onSaveInstanceState方法保存的Bundle对象作为参数传递给onRestoreInstanceState和onCreate方法。onRestoreInstanceState的调用时在onStart之后。
onSaveInstanceState只会在Activity即将被销毁并且有机会重新显示的情况下才会去调用它,当Activity正常销毁的时候,系统不会调用onSaveInstanceState。
另外当通知栏被滑下来的时候,Activity不会有周期的变化,因为通知栏是系统级的remoteView不是Activity所以不会引起Activity生命周期的变化。
附上Demo地址https://github.com/boomshakalala/ActivityLifeCycleDemo.git