Android-管理Activity生命周期 -暂停和恢复一个Activity
在正常的使用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的更多相关文章
- Android学习路线(十三)Activity生命周期——暂停和恢复(Pausing and Resuming )一个Activity
在正常使用应用的过程中.前台的activity在一些时候会被其它的组件遮挡,导致这个activity暂停.举个样例.当一个半透明的activity被打开(比如一个dialog样式的activity), ...
- 【Android Developers Training】 16. 暂停和恢复一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Android-管理Activity生命周期 -停止和重启Activity
停止和重启activity在activity的生命周期中很重要,它能让用户感觉你的app总是激活的而且不会丢失他们的进度.activity在下面的这些情况会停止和重启: 用户打开常用app窗口然后从你 ...
- activity生命周期分析(两个activity之间跳转的生命周期执行顺序)
NoteMainActivity点击跳转至NoteListActivity 我们都了解: 当A界面点击进入B界面时,此时 A===onPause--->onStop ...
- 【Android Developers Training】 14. 序言:管理Activity生命周期
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Android-管理Activity生命周期 -开始一个Activity
很多程序都是从main()方法开始启动的,和其他程序不同,android是在activity生命周期的特定状态的特定回调方法中初始化代码的.activity启动和销毁的时候都用很多回调方法. 这里将要 ...
- Android-管理Activity生命周期 -重新创建Activity
按照正常的app行为,很少情况下activity会销毁,只有当用户点击了返回按钮或者activity通过调用finish()发出销毁信号.系统也有可能销毁activity如果它是停止状态并且很久没有使 ...
- Android Activity生命周期详讲
管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...
- Android学习笔记:Activity生命周期详解
进行android的开发,必须深入了解Activity的生命周期.而对这个讲述最权威.最好的莫过于google的开发文档了. 本文的讲述主要是对 http://developer.android.co ...
随机推荐
- ImportError: No module named _sqlite3 - 代码分享
ImportError: No module named _sqlite3 - 代码分享 ImportError: No module named _sqlite3 作者:86市场网 点击 ...
- 从零开始,使用python快速开发web站点(1)
环境:ubuntu 12.04 python版本: 2.73 ok,首先,既然是从零开始,我们需要的是一台可以运行的python的计算机环境,并且假设你已经安装好了python, (ubuntu 或 ...
- atitit.高级编程语言的特性 and 未来趋势与进化.doc
atitit.高级编程语言的特性 and 未来趋势与进化.doc 1 编程语言的发展历程 1 1.1 编程语言的进化,起始发现背后的思想 :不论什么两个系统之间的复杂性,都能够通过加入一个抽象层要屏蔽 ...
- poj1797(最短路小变形)
题目连接:http://poj.org/problem?id=1797 题意: 分析:dp[i]表示到达i点的过程中的最大承受重量,更新到i点时可能有多条路径,由优先队列堆出最大的那条即可. #inc ...
- php反射类 ReflectionClass
什么是php反射类,顾名思义,能够理解为一个类的映射.举个样例: class fuc { //定义一个类static function ec() {echo '我是一个类';}}$cla ...
- Java 理论与实践: 处理 InterruptedException(转)
很多 Java™ 语言方法,例如 Thread.sleep() 和 Object.wait(),都可以抛出InterruptedException.您不能忽略这个异常,因为它是一个检查异常(check ...
- Amazon AWS创建RHEL 7实例
在AWS上登录 如果没有账号的话先注册,参考 http://blog.banban.me/blog/2014/06/09/li-yong-awsmian-fei-zhang-hu-da-jian-vp ...
- Codeforces Round #198 (Div. 2) C. Tourist Problem (数学+dp)
C. Tourist Problem time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- hihocoder第42周 k*N骨牌覆盖(状态dp+矩阵快速幂)
上周的3*N的骨牌,因为状态只有8中,所以我们可以手算出状态转移的矩阵 但是这周是k*N,状态矩阵不好手算,都是我们改成用程序自动生成一个状态转移的矩阵就行了,然后用这个矩阵进行快速幂即可 枚举枚举上 ...
- WPF用SkewTransform画3D柱状图
WPF用SkewTransform画3D柱状图 SkewTransform主要是对控件实现一种2-D扭曲,具体内容可以查看以下链接: http://msdn.microsoft.com/zh-cn/l ...