Activity生命周期分析
标准情况下
-
onCreate()
:表示Activity正在创建中,初始化工作,比如调用setContentView
加载布局资源、初始化Activity所需的数据 -
onRestart()
:表示Activity正在重新启动,从不可见为可见状态时调用。 -
onStart()
:表示Activity正在被启动,即将开始,已经后台可见,前台不可见。理解为Activity已经显示出来了但是我们看不到。 -
onResume()
:表示Activity已经前台显示出来并且可以操作了。注意:onStart是在后台,onResume是在前台显示。 -
onPause
:表示Activity正在停止,一般情况下紧接着onStop将会调用。在特定情况下,如果这个时候快速回到当前Activity,那么onResume会被调用。可以在onPause中存储一些数据,但是不能进行耗时操作,因为新的Activity必须等前一个Activity调用完onPause方法后才会调用onResume方法,显示出来。 -
onStop
:表示Activity即将停止,可以做一些稍微重量级的回收工作,但也不能太耗时。 -
onDestroy
:表示Activity即将被销毁,可以在其中做一些回收工作和最终的资源释放。
补充:
- 当打开新的Activity后,切换到桌面,调用:onPause()->onStop();
- 如果是新Activity是透明主题,那么老Activity不会调用onStop();
- 当用户从桌面再次回到Activity后:onRestart()->onStart->onResume();
- 打开一个新的Activity,是老Activity的onPause()先调用,再调用新的Activity的onResume()方法;也就是新Activity需要等老Act调用完onPasue()后才能显示出来,所以不能在onPause中进行耗时操作。
异常情况下生命周期分析
1.资源相关的配置发生改变
比如说横屏手机和竖屏手机会拿到两张不同的图片
插句话:
在开发android的应用中,有时候需要限制横竖屏切换。只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。
android:screenOrientation="landscape"是限制此页面横屏显示,
android:screenOrientation="portrait"是限制此页面数竖屏显示。
android:screenOrientation="landscape"是限制此页面横屏显示,
android:screenOrientation="portrait"是限制此页面数竖屏显示。
当前Activity处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity就会被销毁并且重新创建;当然我们也可以阻止系统重新创建我们的Activity。
正常情况下的销毁重建:
销毁:当系统配置发生改变后,Activity会被销毁,其onPause,onStop,onDestroy方法都会调用,由于是异常状态下终止,所以会调用onSaveInstanceState方法来保存当前Activity的状态(视图结构、输入的数据、ListView滚动的位置等);这个方法的调用时机是在onStop之前,可能在onPause之前或之后。
恢复:重新创建时会调用onRestoreInstanceState,把刚刚onSaveInstanceState方法所保存的Bundle对象传递给onRestoreInstanceState和onCreate方法。onRestoreInstance发生在onStart之后。