在正常的app使用时,前台的activity有时被其他课时的组建所受阻而暂停。例如,当一个半透明的activity打开(诸如一个该样式的对话框),activity就会暂停。只要是部分可见但目前仍未获得焦点的activity,它保持暂停状态。
然而,一旦activity完全被阻塞和不可见时,它会停止(这将在下一课讨论)。
当你的activity进入暂停状态,系统在你的activity中调用onPause()方法,,你可以停止正在进行的行为,不应该继续而停了下来(如视频)或保存任何应永久保存的信息,以防用户继续离开应用程序。如果用户从暂停状态返回到你的activity,系统恢复它并调用onResume()方法。
图解:当一个半透明的activity掩盖了你的activity,系统调用onPause()方法,并在(1)处等待。如果用户返回到该activity,而它仍处于(1)的状态,系统调用onResume()方法(2)
暂停你的Activity
当系统为你的activity调用onPause()方法时,这在技术上意味着你的活动仍是部分可见,但大多数情况下是用户要离开你activity的迹象,它会很快进入停止状态。通常你应该使用onPause()方法去:
(1)停止当前的动画效果或者其他消耗CPU的行为
(2)提交为保存的修改,但前提是用户希望被永久修改(eg:未发送的邮件)
(3)释放系统资源,eg:broadCatdReceivers,GPS,以及一切会影响你电量和CPU的操作,前提是接下来的操作你的用户不再需要它们
例如,如果你的应用程序使用相机时,onPause()方法是一个很好的地方去将其释放。
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
// Release the Camera because we don‘t need it when paused
// and other activities might need to use it.
if (mCamera != null) {
mCamera.release()
mCamera = null;
}
}
通常,您不应该使用onPause()来存储用户更改(如表单输入个人信息)永久存储。唯一一次你应该坚持用户更改永久存储在onPause()当你某些用户期望的变化自动保存(例如当起草一封电子邮件)。然而,你应该避免在cpu密集工作期间调用onPause(),如写入数据库,因为它会减缓过渡到下一个activity的速度(您应该在onStop()中执行重载关闭操作)。
你应该保持onPause()方法完成相对简单的操作,以保证在程序停止时快速过渡到用户的下一个目的地。
重新占有你的Activity
当用户从暂停状态重新回到activity,系统调用onResume()方法。
请注意,每次你的activity进入前景时系统会调用这个方法,包括第一次创建的时候。因此,你应该实现onResume()来初始化你在onPause()中释放的组件并且做一些每次进入Resumed状态时都会发生的初始化的工作(如开启一个动画和当用户获得焦点时要初始化的组件)
下面onResume()的例子是对应onPause前面的例子(),所以当activity暂停时它初始化相机。
@Override
public void onResume() {
super.onResume(); // Always call the superclass method first
// Get the Camera instance as the activity achieves full user focus
if (mCamera == null) {
initializeCamera(); // Local method to handle camera init
}
}