一、Activity的活动状态
a、运行状态:该Activity处于栈顶位置上,并且可与用户进行交互
b、暂停状态:该Activity不在栈顶位置上,但仍然可见
c、停止状态:该Activity不在栈顶位置上,且不可见。这时可能会被系统回收。
d、销毁状态:该Activity从栈中移除了(调用finish())。系统回收资源。
二、生命周期方法:
1、onCreate():当Activity在第一次被创建时调用。通常会在这个方法中完成一些初始化操作。
2、onStart():当Activity从不可见状态变成可见状态时调用。
3、onResume():当Activity处于栈顶,并且可与用户进行交互时调用。
4、onPause():当系统去启动或者恢复另一个活动的时候调用。这个方法执行的速度一定要快,不然会影响新的栈顶活动的使用。通常可以在这个方法中保存一些关键数据。
5、onStop():当Activity完全处于不可见时调用。
6、onDestroy():当Activity被销毁时调用。
7、onRestart():当Activity被重新启动时(从停止状态变为运行状态)调用。
我们来看一下这一张经典的生命周期流程图:
三、Activity的生存期
完整生存期:Activity在onCreate()和onDestroy()之间所经历的。
可见生存期:Activity在onStart()和onStop()之间所经历的。
前台生存期:Activity在onResume()和onPause()之间所经历的。
扩展:横竖屏切换时的生命周期
转载:http://blog.csdn.net/liuhe688/article/details/6733407当我们旋转屏幕时,我们发现系统会先将当前Activity销毁,然后重建一个新的。
1.指定为竖屏:
在AndroidManifest.xml中对指定的Activity设置android:screenOrientation=”portrait”。
或者在onCreate方法中指定:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //竖屏2.指定为横屏:
在AndroidManifest.xml中对指定的Activity设置android:screenOrientation=”landscape”。
或者在onCreate方法中指定: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //横屏切换横屏执行方法:
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState切换竖屏时执行方法:
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume为了避免这样销毁重建的过程,在AndroidMainfest.xml中,将该Activity对应的
< activity >标签配置android:configChanges=”orientation”属性。这样每次旋转方向时,就只有onConfigurationChanged()方法被调用,没有了销毁重建的过程。
以下是需要注意的几点:
1.如果< activity >配置了android:screenOrientation属性,则会使android:configChanges=”orientation”失效。2.模拟器与真机差别很大:
模拟器中如果不配置android:configChanges属性或配置值为orientation,
切到横屏,执行一次销毁->重建,切到竖屏执行两次。真机均为一次。模拟器中如果配android:configChanges=”orientation|keyboardHidden”(如果是Android4.0,则是”orientation|keyboardHidden|screenSize”),
切竖屏执行一次onConfigurationChanged,切横屏执行两次。真机均为一次。
在活动A中启动活动B,活动A进入停止状态。如果此时活动A被系统回收了,当用户按下back返回键时,是返回home界面还是活动A界面呢?
答案是:返回活动A。但是并不是执行onRestart()返回的,而是执行活动A的onCreate()。因为活动A在这种情况下会被重新创建一次。
解决活动被回收时临时数据得不到保存的问题:使用onSaveInstanceState()
这个方法可以保证在活动被回收之前一定会被调用。
取回临时数据:
如果在活动被系统回收之前有通过调用onSaveInstanceState()来保存数据的话,就可以在onCreate()方法中的参数Bundle saveInstanceState取回临时数据。
这里就通过了Bundle实现数据的存取操作。
通过Intent传递Bundle数据:
首先将需要传递的数据保存在Bundle对象中,再将Bundle对象存放在Intent里。在目标活动中,先从Intent中取出Bundle,再从Bundle中取出数据。