Android开发教程:Activity生命周期的理解
Activity生命周期的七个状态事件分别为onCreate(BundlesavedInstenceState)、onstart()、onRestart()、onResume()、onPause()、onStop()、onDestory()
下面是activity的生命周期图:
在activity对象加载时开始调用它的onCreate(Bundle savedInstenceState)方法
运行时调用它的onStart()方法和onResume()方法
·当这个activity可见但失去焦点时,就调用它的onPause()方法;当这个activity对象再次获得焦点时,用户可对其进行相应的操作,这时候就调用它的onResume()方法;
·当这个activity对象处于不可见的情况,并且与其他的activity进行切换时,这时就由onResume()方法开始执行,往下到onPause()方法,再到onStop(),处于停止状态,用户不能对其进行任何操作。 ·当屏幕的方向发生改变时,Activity会被摧毁并且被重新创建
注意:但是如果是两个来回切换的页面activity时,下一个activity中有返回键,点击返回键就切换回当前的activity。这时就要注意了,如果是点击第二个activity页面上的返回键,会从onCreate(Bundle savedInstenceState)方法开始调用,第一个activity会重新创建一次,也就是说返回过来的activity页面已经不是切换过去的那个activity了。但是如果点击键盘上的返回键,就会调用onRestart()方法,意思就是这时切换回的界面还是刚才切换过去的第一个activity
·假如在这个activity对象里有一个对话框的操作,当点击指定按钮时就会在这个activity中弹出一个对话框,此时的对话框是依附在这个activity之上的,实际上还是显示的一个activity对象。又因为生命周期事件只有在activity和activity之间的转换才会触发,因此,此时无生命周期事件的触发也无方法的调用
onSaveInstanceState() 和 onRestoreInstanceState()方法的调用:
它们不是生命周期方法,不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用,从而保存用户数据。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法
这时应注意的是:onRestoreInstanceState()方法调用的前提是activity必须被系统真正销毁,即onDestory()方法必须被执行。反之,如果系统没有将该activity销毁,该activity只是处于暂停或停止状态,即该activity不是被正常关闭销毁,如果是因为内存不足或其他原因导致可能被系统销毁;onRestoreInstenceState方法就不会被调用执行。例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行。