Android官方开发文档Training系列课程中文版:管理Activity的生命周期之暂停和恢复Activity

简介: 原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/pausing.html在APP的正常使用过程中,在前台工作的Activity有时可能会被其他的可视化组件挡住,而引起Activity进入Paused状态。

原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/pausing.html

在APP的正常使用过程中,在前台工作的Activity有时可能会被其他的可视化组件挡住,而引起Activity进入Paused状态。举个例子,当一个半透明的Activity打开后(类似于Dialog那种风格),那么原先的那个Activity便会进入Paused状态。只要Activity仍然只是部分可见,并且它没有获得焦点,那么它就一直保持在Paused状态。

然而,只要activity一旦被全部挡住,并且不可见,那么就会进入Stopped状态。

在系统调用Activity的onPause方法时,activity随之就进入了paused状态,这期间允许你停止一些不应该继续进行的活动(比如视频),还应该对用户的任何信息做持久化存储,万一用户退出了APP。如果用户从Paused状态返回了Activity,系统会调用onResumed方法并回到Resumed状态。

Note:当Activity的onPause方法被调用,这意味着Activity可能会在Paused状态待一会,并且稍后用户可能会再次返回到这个Activity中。无论如何,这通常是用户离开Activity的第一个信号。


上图:当一个半透明的Activity挡住了原先的Activity,系统会调用onPause方法,然后Activity会等在Paused状态(1),如果在Paused状态返回了Activity,那么系统会调用onResume方法(2)。

暂停Activity

当系统调用了onPause方法,这从技术上说activity当前是部分可见状态,但是大多数情况下,这表示用户离开了Activity,并且稍后会进入Stopped状态。你应该一般使用onPause方法做这些事情:

  • 停止动画或者运行中的活动等这类消耗CPU资源的行为。
  • 保存没有存储的改变,但这仅限于用户希望保存的东西(比如电子邮件的草稿)。
  • 释放系统资源,比如广播接收器,正在处理中的传感器(比如GPS),任何用户不再需要的,可能会影响到电量的任何资源。

举个例子,如果应用使用了Camera,在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方法来持久化存储用户的改变(比如输入表格的用户信息)。唯一的一点就是用户希望这些数据可以自动的存储(比如起草的email)。然而,应该避免在onPause方法中执行高强度的CPU工作,比如写入数据库,因为它会减慢切换到下一个Activity的速度(你应该在onStop方法中做这些重量级操作)。

你应该在onPause方法中保持相对简单的完成操作,为了可以快速过渡到下个Activity。

Note:如果activity在Paused状态,那么activity会常驻在内存中,它会在activity恢复的时候重新被调用。你不需要重新初始化这些在任何回调函数中被重新创建的组件。

恢复Activity

如果用户从Paused状态恢复到了Resumed状态,系统会调用onResume方法。

应该意识到系统每次调用这个方法activity就进入了前台,包括在第一次创建的时候。因此,你应该在onResume中实例化组件,然后在onPause中释放这些组件,每次在activity进入resumed状态的时候执行其必须的初始化操作(比如启动动画和activity获取到焦点之后只实例化要使用的组件)。

下面这个onPause的例子是上面onResume例子的副本,所以应该在activity暂停的时候释放初始化过的camera对象。

@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
    }
}
目录
相关文章
|
9月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1728 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1110 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1192 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
10月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
926 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
9月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
429 0
|
10月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1365 6
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
537 0
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
5651 77
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
708 11
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
510 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡

热门文章

最新文章