安卓训练-开始-管理 Activity 生命周期-暂停和恢复 Activity

暂停和恢复 Activity

这节课教你
  1. 暂停你的 Activity
  2. 恢复你的 Activity
你还需要阅读
试试
下载示例

ActivityLifecycle.zip

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

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

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

注意:当你的 activity 收到一个 onPause() 调用,这表示你的 activity 将被暂停一段时间然后用户会回来。但是,这通常是用户离开你的 activity 的第一步。

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

暂停你的 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 恢复时会唤醒它。你不需要重新初始化那些在 Resumed 状态之前的任何回调方法中创建的组件。

恢复你的 Activity


当用户从 Paused 状态恢复你的 activity,系统调用 onResume() 方法。

需要意识到,每次你的 activity 来到前台时,包括它第一次被创建,系统调用这个方法。因此,你需要实现 onResume(),初始化你将在onPause() 中释放的组件,并执行每次进入 Resumed 状态都需发生的其他任何操作(比如启动动画和初始化只有在 activity 有用户焦点时才使用的组件)。

下面是 onResume() 的例子,与前面的onPause() 例子相对应,初始化当 activity 暂停时释放的摄像头。

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

    // 当 activity 获得完全用户焦点时,取得摄像头实例
    if (mCamera == null) {
        initializeCamera(); // 初始化摄像头的局部方法
    }
}
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,AMS(Activity Manager Service)负责管理 Activity生命周期Activity 有四个状态:运行状态、暂停状态、停止状态和销毁状态。当一个 Activity 运行,它可以被用户看到,并响应用户的交互;当它被暂停,它被部分遮挡,但仍然在屏幕上存在;当它被停止,它被完全遮挡,但其状态仍然保留在内存中;当它被销毁,它被完全删除,其状态也从内存中释放。 Activity 生命周期管理的关键是回调方法。Android 系统提供了一组回调方法,使得开发者可以在 Activity 的不同状态下执行相应的操作。 以下是 Activity 生命周期的回调方法: 1. onCreate(): Activity 被创建调用,通常用来完成界面的初始化和数据的加载。 2. onStart(): Activity 变为可见调用,此 Activity 进入运行状态。 3. onResume(): Activity 处于前台并处于运行状态调用,此 Activity 可以响应用户的交互。 4. onPause(): 当其他 Activity 显示在前台并且当前 Activity 处于可见状态调用,此 Activity 进入暂停状态。 5. onStop(): Activity 完全被遮挡调用,此 Activity 进入停止状态。 6. onRestart(): 当 Activity 从停止状态重新进入运行状态调用。 7. onDestroy(): Activity 被销毁调用,通常用来释放内存或资源。 开发者应根据自己的应用需求在这些回调方法中编写相应的业务逻辑,从而实现自己的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值