暂停和恢复 Activity



这节课教你


  1. 暂停你的 Activity
  2. 恢复你的 Activity

你还需要阅读



  • Activities

试试



下载示例

ActivityLifecycle.zip



在应用的使用过程中,有些时候前台 activity 会被其他可视组件阻塞,导致这个 activity 暂停。例如,当一个半透明的 activity 打开时(比如一个半透明对话框),前一个 activity 暂停。只要这个 activity 部分可见并且不是当前聚焦的 activity,它将保持暂停状态。

但是,一旦这个 activity 完全阻塞并且不再可见,它就停止了(在下节课中讨论)。

当你的 activity 进入暂停状态,系统调用你的 ActivityonPause() 方法,这允许你停止正在执行的当暂停后不应该再继续的操作(比如一个视频)或持久化应该被长期保存的任何信息以防用户离开你的应用。如果用户从暂停状态回到你的 activity,系统将恢复它并调用onResume()方法。 注意:当你的 activity 收到一个 onPause()


android 断开服务 android停用后如何恢复_系统调用

图 1. 当一个半透明的 activity 阻塞你的 activity,系统调用onPause() 然后 activity 在 Paused 状态等待 (1)。如果用户回到还在暂停中的 activity,系统调用onResume()

暂停你的 Activity


当系统调用你的 activity 的 onPause(),在技术上这意味着你的 activity 仍是部分可见的,但通常都表示用户正离开这个 activity 并且一会它将进入 Stopped 状态。你通常使用onPause()

  • 停止动画或其他正在执行的消耗 CPU 的操作。
  • 提交未保存的当用户离开时他们期望长期保存的变化(比如电子邮件草稿)。
  • 释放系统资源,比如广播接收者,传感器(比如 GPS)处理器,或当你的 activity 暂停并且用户不再需要的 可能影响电池生命的任何资源。

例如,如果你的应用使用 摄像头onPause()

@Override
public void onPause() {
    super.onPause();  // 总是先调用超类方法

    // 释放摄像头,因为在暂停时我们不需要它并且其他 activity 可能需要使用它。
    if (mCamera != null) {
        mCamera.release()
        mCamera = null;
    }
}

通常,你应该使用 onPause() 把用户变化(比如表单中输入的个人信息)存入持久化存储。只有当你确定用户期望变化被自动保存(比如在写电子邮件草稿时)时,才使用onPause() 把用户变化存入持久化存储。但是,你应该避免在onPause() 中执行 CPU 密集型操作,比如写入数据库,因为这会减慢到下一个 activity 的可视界面的转变(作为替代,你应该在onStop()如果你的 activity 实际上被停止,为了让用户快速转变到下一个目的地,你在 onPause() 注意:当你的 activity 被暂停,Activity

恢复你的 Activity


当用户从 Paused 状态恢复你的 activity,系统调用 onResume()需要意识到,每次你的 activity 来到前台时,包括它第一次被创建,系统调用这个方法。因此,你需要实现 onResume(),初始化你将在onPause()下面是 onResume() 的例子,与前面的onPause()

@Override
public void onResume() {
    super.onResume();  // 总是先调用超类方法

    // 当 activity 获得完全用户焦点时,取得摄像头实例
    if (mCamera == null) {
        initializeCamera(); // 初始化摄像头的局部方法
    }
}