android Activity生命周期

Android系统会跟着所有运行的Activity对象,它将这些对性放在一个栈中进行管理。当一个新的Activity启动时,处于栈顶的Activity会暂停,而这个新的Activity会放入到栈顶,当这一新的Activity完成时,它会从栈中被移除,而先前的Activity会回到栈顶。如下图:

 

Android的Activity生命周期如下图描述:

onCreate:Activity启动时调用的第一个方法。在此方法中有一个参数,即Bundle,在首次启动时,这个参数为null,当程序由于内存的原因而被杀掉的时候,如果用户在onSaveInstanceState方法中做了相应的状态保存的操作的话,那个当他再次重新启动的时候,这个Bundle就包含了先前在onSaveInstanceState方法中保存的状态信息,以便Activity回到先前的状态。

onStart:当用户对Activity可见时,此方法调用。

onResume:在此方法中主要用于接收Activity数据和进行一些列的初始化操作。当Activity到达栈顶的时候,即将成为前台进程时,此方法被调用,虽然这一个时刻Activity肯能还不为用户所见,但这里是获取资源的最佳场所。

onPause:当另一个Activity被移至栈顶的时候,当前Activity会收到它已在栈中被下移的通知,此时调用onPause方法。onPause方法是Activity在后台最后一次能够有机会进行清理工作、释放无需资源的地方。Activity的onPause方法必须要尽快的执行完成,因为前台的Activity必须要等到它执行完成之后返回后才能启动。当当前Activity失去焦点只有部分界面可见的时候,也会调用onPause方法。

onStop:当另一个Activity被恢复而完全遮住当前Activity界面的时候,onStop被调用。

onDestroy:Activity生命周期的最后一个方法,当调用finish方法或由于内存原因被系统杀死后会依次调用onPause——>onStop——>onDestroy方法,来结束Activity生命周期。

注意:可以根据isFinishing方法来判断是由于调用了finish方法而结束Activity还是由于内存原因被系统杀死的。

通过调用finish方法结束的Activity会从Activity栈中弹出,而由于系统内存原因结束的Activity不会从栈中弹出,依然会保留在栈中,因为在用户点击返回按钮的时候,它还 是有可能需要在恢复到前页面的。

 

为了避免Activity对象被销毁,应该尽可能的在onPause方法中释放尽可能多的资源,那么转入后台时被销毁的可能性就越低。

 

当Activity由于内存原因被销毁的时候,可以通过使用onSaveInstanceState方法将状态信心保存在一个Bundle对象中,当Activity恢复时此Bundle会做为参数传入到onCreate方法中,以便界面回复到之前的状态。

标签