生命周期函数

Activity-生命周期 - 图1
生命周期函数调用时机和应该做的处理如下:

  • onCreate()在Activity创建的时候调用,通常在该方法中加载布局,初始化控件,执行基本应用启动逻辑,启动逻辑指在 Activity 的整个生命周期中只应发生一次的逻辑,如数据绑定或实例化一些类范围的变量。注意,此方法接收 savedInstanceState 参数, 即Activity 先前保存状态的 Bundle 对象,可以通过对该参数判空,确定页面是否发生了销毁重建。该方法执行完毕后,Activity 进入已开始状态。

  • onStart()在Activity 进入“已开始”状态时调用,使 Activity 对用户可见。可以在此方法中为 Activity 进入前台并支持交互做准备,如初始化维护界面的代码。该方法会非常快速地完成,Activity 会进入已恢复状态。

  • onResume()会在Activity 进入“已恢复”状态并来到前台,即Activity处于栈顶,并且处于运行状态时调用。此时是应用与用户交互的状态,应用会一直保持这种状态,直到因某些事件发生导致焦点离开应用,如跳转到其他页面或应用,用户点击返回或honme键等。在中断事件发生时,会调用 onPause() 方法,进入已暂停状态,由已暂停状态回到已恢复状态时,会再次调用该方法,需要在该方法中需要恢复 onPause() 方法中释放的资源和清除的状态。

  • onPause()被视为用户正在离开当前 Activity 的第一个标志,在 Activity 不再位于前台时调用。在该方法中应该暂停一些没必要的操作,例如部分系统资源、传感器(例如 GPS)等,避免影响电池续航时间,可以在onResume()中恢复。但是要注意,onPause() 执行非常简单,不一定要有足够的时间来执行保存操作,切勿在该方法中保存应用数据、进行网络调用等异步操作、或执行数据库事务,此类操作应该在 onStop() 方法中执行。完成 onPause() 方法后,Activity 会保持“已暂停”状态,直到其恢复或变成对用户完全不可见。

  • onStop()在 Activity 对用户不可见时调用,在 onStop() 方法中,应用应释放对用户不可见时的无用资源,例如动画等。同时使用 onStop() 执行 CPU 相对密集的关闭操作,如数据的保存等。当 Activity 进入“已停止”状态时,Activity 对象会继续驻留在内存中,并维护所有状态和成员信息。

  • onDestroy()在销毁 Ativity 之前调用。销毁的原因包括:1.用户彻底关闭Activity 或调用了 Activity 的finish()方法;2.由于设备旋转或多窗口模式,系统暂时销毁Activity。可以使用 isFinishing() 方法区分这两种情况。onDestroy() 应释放先前尚未释放的所有资源,也需要注意持有该Activity引用的非静态内部类/匿名类,结束其耗时操作,否则会造成内存泄漏。

需要注意:无论应用选择在哪个构建事件中执行初始化操作,务必使用相应的生命周期事件来释放资源。如果在 ON_START 事件后在onStart()初始化某些内容,则需要在 ON_STOP 事件的onStop()中释放或终止该内容。如果在 ON_RESUME 事件后onResume()执行初始化操作,则在 ON_PAUSE 事件后onPause()中释放。