`

[Android Training视频系列]2.2 Pausing and Resuming an Activity

阅读更多
1.主要内容
本讲介绍onPause和onResume,主要分析了在onPause函数中应该执行哪些操作。

2.视频讲解
http://www.eyeandroid.com/thread-11291-1-1.html

3.翻译参考
在正常的程序使用中,处于前台运行的activity有时会被另外一些可见的组件遮挡,从而造成activity被暂停。比如,一个半透明的activity(类似一个对话框)被打开,先前那个activity就会被暂停。虽然这个activity还有部分可见,但是当前的焦点不在这个activity上,因此它保持在paused状态。

不过,一旦这个activity被全部遮挡,处于不可见的状态,那么它就是被停止了。(下个教程讨论)

如果你的activity要进入paused状态,系统会调用你的activity种的onPause()方法,这个方法让你能够暂停那些不应该继续运行的行为(比如暂停视频播放),或者保存那些应该永久保存的用户数据。一旦用户从paused状态返回,系统能够调用onResume()方法恢复以前的运行。

提示:当activity接收调用onPause()时,这可能表明activity要暂时进入paused状态,用户可能马上就重新获得activity的焦点。但是,它也是用户离开这个activity时会调用的第一个方法。




图解:当一个半透明的activity覆盖你的activity时,系统调用onPause(),activity就会在Paused状态中等待(1)。系统调用onResume()方法返回activity。

暂停你的activity
当系统调用onPause()方法的时候,技术上说明activity还是能部分可见的,但是大部分情况表明用户要离开activity,它将进入Stopped状态。你通常使用onPause()函数做下面的事:
停止消耗cpu的动画或者运行中的动作。
提交未保存的更改,但是只是保存用户离开后期望永久保存的东西(比如邮件草稿)。
释放系统资源,比如广播接收器,传感器(比如GPS),或者消耗电量的资源,这些资源是activity暂停后用户不再需要的。
例如,如果你的程序需要使用摄像头,onPause()方法中是释放它的好地方。

@Override 
public void onPause() { 
    super.onPause();  // 通常先调用父类方法 
 
    // 释放摄像头资源 
    if (mCamera != null) { 
        mCamera.release() 
        mCamera = null; 
    } 


通常情况下,你不需要使用onPause()方法储存用户的修改(比如填写信息的表单)到固定存储器。只有在用户真的期望自动保存数据(比如邮件草稿)的时候才需要在onPause()方法中保存。你应该尽量避免在onPause()方法中让CPU进行密集的工作,比如写入数据到数据库,因为这样会减慢你进入下一个activity的速度(你应该在onStop()中执行这些高负载的关闭操作)。

如果你的activity确实需要被停止话,你应该保持你onPause()方法尽量的简单,这样能够保证快速的转换到用户的下一个目的地。

提示:当你的activity已经被paused,这个activity实例会被保持在内存中,当activity需要被恢复的时候被调用。你不需要再重新初始化组件。

恢复你的activity
当用户从Paused状态恢复你的activity的时候,系统调用onResume()函数。

需要了解的是activity每次进入前台都会调用这个方法,包括activity被第一次创建的时候。这样的话,你必须在onResume()方法中初始化那些onPause()中释放的组件,并且执行任何需要在Resumed状态中需要的初始化工作。(比如开始动画和初始化activity前台状态需要的组件)

下面的例子和上面onPause()的例子相对应,这里初始化暂停时释放的摄像头资源。
@Override 
public void onResume() { 
    super.onResume();  // 调用父类方法 
 
    // 当activity取得用户焦点时取得摄像头实例 
    if (mCamera == null) { 
        initializeCamera(); // 摄像头初始化的本地方法 
    } 

  • 大小: 56.2 KB
0
2
分享到:
评论

相关推荐

    暂停和恢复Activity-Pausing and Resuming an Activity

    Android应用程序的Activity是用户交互的核心组件,它代表了一个屏幕上的单一任务。每个Activity都会经历一个生命周期,其中包含了若干个状态和回调方法。当应用程序在正常运行时,可能会因为某些事件发生而需要暂停...

    Android入门-新手如何成功创建一个Android小应用

    了解Activity的生命周期是关键(2.1启动一个Activity - Starting an Activity.pdf、2.2暂停和恢复Activity-Pausing and Resuming an Activity.pdf、2.3停止和重启Activity-Stopping and Restarting an Activity.pdf...

    Android 暂停和恢复Activity

    暂停和恢复Activity(Pausing and Resuming an Activity) 一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口...

    Android Activity生命周期Demo源码.rar

    在Android应用开发中,Activity是用户界面的基本组件,它负责展示屏幕上的内容并处理与用户的交互。Activity的生命周期是Android开发者必须深入理解的关键概念,因为它直接影响到应用的性能、资源管理和用户体验。本...

    Activity生命周期

    Activity是Android应用开发中的核心组件之一,它负责与用户交互并展示UI。了解Activity的生命周期是每个Android开发者必备的基础知识。Activity的生命周期是由系统管理的,主要包括创建、启动、运行、暂停、停止以及...

    activity生命周期

    Activity是Android应用中的核心组件,它负责用户界面的展示和交互。理解Activity的生命周期对于开发高效、稳定的应用至关重要。在Android系统中,Activity有多种状态,每个状态对应着不同的行为和资源管理。以下是对...

    android基础总结篇之一:Activity生命周期

    在Android开发中,Activity是应用程序的核心组件,它代表了一个用户可见的屏幕,承载着用户的交互和数据展示。Activity的生命周期是开发者必须掌握的关键概念,因为它决定了程序如何响应用户的操作以及系统资源的...

    LifeCycleDemo

    在Android应用开发中,`Activity`是用户界面的主要载体,它是应用程序中负责与用户交互的组件。本项目"LifeCycleDemo"着重展示了`Activity`的生命周期及其在横竖屏切换时的变化,通过代码实例帮助开发者深入理解这一...

    Microsoft Codeview and Utilities User's Guide

    13.3.28 Pausing during Linking (/PAU) 13.3.29 Specifying User Libraries for Quick Languages (/Q) 13.3.30 Setting Maximum Number of Segments (/SE) 13.3.31 Controlling Stack Size (/ST) 13.3.32 Issuing ...

    labview_可以对单次输入的信号进行滤波分析和图像显示_低频率的未知信号

    It also has the functions of pausing and preserving historical images. This program is mainly for low frequency unknown signals, for high frequency signals, the best way to use a single sampling.)

    ciclo-vida-activity-android:理解活动生命周期的例子

    在Android应用开发中,活动(Activity)是用户与应用程序交互的主要界面。理解活动的生命周期对于构建高效、响应迅速且用户体验良好的应用至关重要。本教程将深入探讨Android活动生命周期,并通过具体的例子来阐述...

    activitylifecyclecodingchallenge

    - **暂停与恢复(Pausing & Resuming)**:如果新Activity只部分遮挡当前Activity,例如弹出一个透明对话框,只会调用`onPause()`。当对话框关闭,Activity再次获得焦点时,会调用`onResume()`。 - **销毁...

    Android代码-ChronometerPersist

    A helper library for keeping and maintaining the state of Chronometers. How to use it? Creating an instance of ChronometerPersist val chronometerPersist = ChronometerPersist.getInstance(chronometer, ...

    Enhanced Host Controller Interface Specification for Universal Serial Bus

    - **Suspend/Resume:** Explains the procedures for suspending and resuming USB operations. - **Schedule Traversal Rules:** Outlines the rules for traversing the periodic and asynchronous schedules. - *...

    ImageMagick图片批量处理

    -page geometry size and location of an image canvas (setting) -ping efficiently determine image attributes -pointsize value font point size -precision value maximum number of significant digits to...

    scrapy.pdf

    - **作业:暂停和恢复爬取(Jobs: pausing and resuming crawls)**:关于如何控制爬虫执行流程的技术。 #### 七、扩展Scrapy Scrapy还可以通过以下方式进一步扩展和定制: - **架构概览(Architecture overview)**:...

    spring-kafka整合.docx

    4. Pausing/Resuming Containers:该版本中,容器的暂停和恢复功能使得系统的维护和管理更加灵活。 5. Stateful Retry:该版本中,状态 retry 机制的实现,提高了系统的可靠性和稳定性。 6. Client ID:该版本中,...

    scrapy1.1 帮助文档

    - **任务管理:暂停与恢复爬取(Jobs: pausing and resuming crawls)**:实现爬虫任务的持久化,便于后续恢复执行。 #### 五、扩展Scrapy - **架构概览(Architecture overview)**:从宏观角度解析Scrapy的内部架构...

Global site tag (gtag.js) - Google Analytics