首页 > 代码库 > 暂停和重新占有一个Activity

暂停和重新占有一个Activity

在正常的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

    }

}

 

暂停和重新占有一个Activity