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
    }
}
目录
相关文章
|
17天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
66 6
|
18天前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
22 3
|
18天前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
16 3
|
18天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
14 0
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
49 4
|
3月前
|
XML Android开发 数据格式
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
64 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
|
2月前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
46 0
|
8天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
7天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
19 5
|
5天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!