Android开发教程:Activity生命周期的理解

每个Activity对象都有三个状态和七个生命周期触发事件,这三种状态分别为运行、暂停和停止。运行状态就是说这个activity对象对于用户是可见的,焦点就在这个activity对象上;暂停状态就是当前的activity对象对于用户也是可见的,但是焦点不在这个activity对象上,用户不能对这个activity对象进行任何操作,打个比方来说就是用户可以看到两个activity对象,但是进行操作的是第二个activity对象,那么这时第二个activity对象处在运行状态,而第一个就处在暂停状态;停止状态就是这个activity对象对于用户是完全不可见的,用户当然也不能对它进行任何操作了,处在停止状态时,仍然保留着当前的状态和信息。当用户长时间不对处于暂停状态的activity进行操作时,这个activity对象也可能会由暂停状态变为停止状态,变为停止状态后,其实这个activity对象就已经比较危险了,因为当运行其他应用程序时,如果系统内存不足就会首先将处于停止状态的activity对象销毁释放资源空间,执行当前的应用程序,如果内存仍然不足就会将处于暂停状态的activity对象销毁,释放资源空间,运行当前程序

Activity生命周期的七个状态事件分别为onCreate(BundlesavedInstenceState)、onstart()、onRestart()、onResume()、onPause()、onStop()、onDestory()

下面是activity的生命周期图:

Android开发教程: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方法不会被执行。

相关推荐