在正常的使用app时,前台的activity有时候会被可见的组件阻塞导致activity暂停。比如,当打开一个半透明的activity(就像打开了一个对话框),之前的activity就会暂停。只要activity仍然部分可见但是没有获得焦点,它会保持在paused状态。

但是,一旦一个activity完全被阻塞并且不可见,它就会到Stopped状态(后面会讨论这个)。

当activity进入Paused状态,系统会调用activity的onPause()方法,可以让你停止那些不需要继续运行的动作(比如视频)和保存那些需要永久保存的信息来防止用户后面离开的app造成信息丢失。如果用户从Paused状态返回到activity,系统会调用onResume()方法

注意:当activity收到onPause()调用,有可能是表示activity会被暂停一会儿,用户一会儿会回来。但是,通常情况下是用户将要离开activity。

图1.当一个半透明的activity挡住了你的activity,系统会调用onPause()然后这个activity会在Paused状态等待。如果当它还是Paused状态时用户返回了,系统会调用onResume()。

暂停Activity

当系统调用onPause(),技术上说activity仍然部分可见,但是大多数情况下意味着用户很快就会离开activity并且activity很快就会进入Stopped状态。通常情况下你可以用onPause()方法来做下面的事:

停止动画和正在执行的操作,他们会消耗CPU

保存没有保存的东西。但是只是在用户希望他们被永久保存的情况下(比如邮件的草稿)

释放系统资源,比如接收广播信息,处理传感器(比如GPS),或者任何activity暂停后用户不需要但是会消耗电池的资源。

例如,如果你的程序使用照相机,onPause()方法是一个释放它的好地方。

@Override
public void onPause() {
super.onPause(); // Always call the superclass method first // 在paused状态时,释放照相机资源因为我们不需要它了
// 以及其他我们不需要的资源
if (mCamera != null) {
mCamera.release()
mCamera = null;
}
}

通常情况下,不应该用onPause()来存储用户更新(比如表单中的用户信息)到永久的存储。只有你确定用户希望更新被自动保存(比如邮件草稿)的时候,才能保存到永久存储。但是需要避免CPU在onPause()时进行大量的工作,比如存数据库,因为会导致切换到下一个activity变慢(应该把需要大量操作的事情放到onStop())。

你应该控制相对少的操作在onPause()中完成,这样可以让用户迅速切换到下一个activity。实际上你的activity变成Stopped状态了。

注意:当activity在Paused状态时,activity实例仍然在内存中然后activity恢复时被继续调用。在恢复到Resumed状态时不需要在任何回调方法中重新初始化组件。

恢复Activity

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

activity到达前台时,系统每次都会调用这个方法,包括第一次创建。因此,你需要初在onResume()中始化那些在onPause()中释放的组件以及那些每次进入Resumed状态都需要的初始化(比如开始动画以及那些只有在activity有焦点时才显示的组件)。

下面的onResume()例子对应上面的onPause()例子,它初始化的activity暂停释放的照相机

@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
}
}

上一篇:Android-管理Activity生命周期 -开始一个Activity

下一篇:Android-管理Activity生命周期 -停止和重启Activity

Android-管理Activity生命周期 -暂停和恢复一个Activity的更多相关文章

  1. Android学习路线(十三)Activity生命周期——暂停和恢复(Pausing and Resuming )一个Activity

    在正常使用应用的过程中.前台的activity在一些时候会被其它的组件遮挡,导致这个activity暂停.举个样例.当一个半透明的activity被打开(比如一个dialog样式的activity), ...

  2. 【Android Developers Training】 16. 暂停和恢复一个Activity

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. Android-管理Activity生命周期 -停止和重启Activity

    停止和重启activity在activity的生命周期中很重要,它能让用户感觉你的app总是激活的而且不会丢失他们的进度.activity在下面的这些情况会停止和重启: 用户打开常用app窗口然后从你 ...

  4. activity生命周期分析(两个activity之间跳转的生命周期执行顺序)

    NoteMainActivity点击跳转至NoteListActivity 我们都了解: 当A界面点击进入B界面时,此时         A===onPause--->onStop       ...

  5. 【Android Developers Training】 14. 序言:管理Activity生命周期

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. Android-管理Activity生命周期 -开始一个Activity

    很多程序都是从main()方法开始启动的,和其他程序不同,android是在activity生命周期的特定状态的特定回调方法中初始化代码的.activity启动和销毁的时候都用很多回调方法. 这里将要 ...

  7. Android-管理Activity生命周期 -重新创建Activity

    按照正常的app行为,很少情况下activity会销毁,只有当用户点击了返回按钮或者activity通过调用finish()发出销毁信号.系统也有可能销毁activity如果它是停止状态并且很久没有使 ...

  8. Android Activity生命周期详讲

    管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...

  9. Android学习笔记:Activity生命周期详解

    进行android的开发,必须深入了解Activity的生命周期.而对这个讲述最权威.最好的莫过于google的开发文档了. 本文的讲述主要是对 http://developer.android.co ...

随机推荐

  1. linux kickstart 自动安装

    最近很多业务系统都是linux lnmp平台安装,反复的安装让人觉得很苦恼,仔细钻研了下kickstart .这里环境是red hat linux 5.8 32位,系统盘中的软件包里包含有kickst ...

  2. Winform通用模块之流水号生成

    打算接下来的时间里把自己觉得用起来还比较好用的通用模块,在这里向大家介绍一下,如果你有更好的想法时,也希望你不吝指点. 1.数据库表及存储过程 在介绍这个通用流水号生成的模块前,我们先来看一下其相关的 ...

  3. MySQL 模拟Oracle邻接模型树形处理

    数据库对层次结构的处理模型有好多种,能够依据自己的需求来设计模型.当然最简单的也是最easy设计的模型就是所谓的邻接模型.在这方面,其它数据库比方Oracle 提供了现成的分析方法 connect b ...

  4. Windows下文件或文件夹不能删除时的解决办法

    windows在删除文件或文件夹时,提示文件或文件夹被占用而无法删除 解决办法:win7: winxp:需要借助第三方工具Unlocker.360.Process Explorer(这个是微软支持的) ...

  5. Cocos2d-x学习笔记(1)

    Cocos2d-x原型Cocos2d,基于Cocos2d-iPhone,跨平台. Hello Workd分析: 1."resource"目录 该目录主要用于存放游戏中须要的图片.音 ...

  6. Sql还原数据库出现3154错误

    要先知道还原的数据库的名字 然后在数据库中新建一个那个名字的数据库, his 是数据库的名字!! RESTORE DATABASE his FROM DISK = 'E:\RDHL文件\HIS相关文档 ...

  7. CMD经常使用的命令

    Win7Excuting订单 win+R.运行该快捷方式.下面3一个人必须知道: ping 它是用来检查网络是否通畅或者网络连接速度的命令. 作为一个生活在网络上的管理员或者黑客来说,ping命令是第 ...

  8. oracle分区表运行计划

    分区表有非常多优点,以大化小,一小化了,加上并行的使用,在loap中能往往能提高几十倍甚至几百倍的效果. 当然表设计得不好也会适得其反.效果比普通表跟糟糕. 为了更好的使用分区表,这里看一下分区表的运 ...

  9. Windows Phone开发(5):室内装修

    原文:Windows Phone开发(5):室内装修 为什么叫室内装修呢?呵呵,其实说的是布局,具体些嘛,就是在一个页面中,你如何去摆放你的控件,如何管理它们,你说,像不像我们刚搬进新住所,要&quo ...

  10.  paip.android环境搭建与开发事例

    paip.android环境搭建与开发事例 好长时间没有玩AndROID了..以前常常做ANDROID的,今天决定在下载一个要做个时间设置器 作者Attilax ,  EMAIL:1466519819 ...