在正常的使用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. Amazon.com : The Odyssey of the Manual Toothbrusher

    Amazon.com : The Odyssey of the Manual Toothbrusher The Odyssey of the Manual Toothbrusher

  2. HDU4876ZCC loves cards(多校题)

    ZCC loves cards Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...

  3. MVC之文件上传1

    MVC之文件上传 前言 这一节我们来讲讲在MVC中如何进行文件的上传,我们逐步深入,一起来看看. Upload File(一) 我们在默认创建的项目中的Home控制器下添加如下: public Act ...

  4. poj1182(并查集)

    题目链接 分析:根据分析,关系的递推满足由[a,b]~[b,c]得:[a,c]=([a,b]+[b,c])%3;[a,d]=([a,b]+[b,c]+[c,d])%3.由rank数组表示关系 0 -  ...

  5. hdu2159(二维完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 题意:打怪,还有最后一级,忍耐度有限m,问在杀怪数量上限为s的情况下能否获取n经验而通关,且忍耐 ...

  6. MVC数据验证使用小结

    原文:MVC数据验证使用小结 描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近 ...

  7. Python做的眼睛护士

    搞了两天终于搞定了,虽然还存在一点点小问题(窗口的显示位置应该设在(0,0)).但基本可以用了. 代码分两个部分.主界面和遮挡屏幕界面.主界面设置完时间后调用遮挡屏幕界面. 1.主界面(设置 工作时间 ...

  8. 去掉windows文件末尾的^M: %s/\r//g

    去掉windows文件末尾的^M: %s/\r//g

  9. B桥接模式ridge

    1.一个简短的引论 1)模式概述:将抽象部分与实现部分分离.使它们都能够独立的变化.让抽象类和派生类各自实现自己的对象.当一个系统有多维度的变化时,将各个维度分离出来让它们独立于变化(多角度地分类实现 ...

  10. Quartz时间配置

    格式: [秒] [分] [小时] [日] [月] [周] [年]  序号 说明  是否必填  允许填写的值 允许的通配符  1  秒  是  0-59    , - * /  2  分  是  0-5 ...