Android官方开发文档Training系列课程中文版:管理Activity的生命周期之暂停和恢复Activity
原文地址 : 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 focusif (mCamera == null) {initializeCamera(); // Local method to handle camera init}
}
Android官方开发文档Training系列课程中文版:管理Activity的生命周期之暂停和恢复Activity相关推荐
- Android官方开发文档Training系列课程中文版:通知用户之创建不同导航方式的Activity
原文地址:http://android.xsoftlab.net/training/notify-user/navigation.html 设计通知时要考虑到用户所预想的导航体验.通常有以下两种情况: ...
- Android官方开发文档Training系列课程中文版:目录
原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...
- Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...
- Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制
原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建
原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...
- Android官方开发文档Training系列课程中文版:构建第一款安卓应用之入门指南
入门指南 欢迎来到安卓开发训练课,在这里你可以找到一系列课程来描述如何使用现有的代码示例来重新适用到你的APP上,你可以在左侧的导航栏顶部看到在若干个大项里有若干个有组织的子项课程.(导航栏请参见官方 ...
- Android官方开发文档Training系列课程中文版:动画视图之应用场景
原文链接:http://android.xsoftlab.net/training/transitions/transitions.html 在转场框架中,动画是由一帧帧的图像连续绘制形成的,这一帧帧 ...
- Android官方开发文档Training系列课程中文版:动画视图之转场框架介绍
原文地址:http://android.xsoftlab.net/training/transitions/index.html 引言 Activity所呈现的UI经常会由用户的输入或者其它事件而发生 ...
- Android官方开发文档Training系列课程中文版:管理音频播放之控制APP的音量与播放
原文地址:http://android.xsoftlab.net/training/managing-audio/index.html 引言 如果APP需要播放音频,允许用户可以控制音频的播放状态是很 ...
- Android官方开发文档Training系列课程中文版:管理Activity的生命周期之启动一个Activity
原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/index.html 导言 用户通过导航退出或者返回应用的时 ...
最新文章
- Precog:大数据分析即服务
- JDK/Java 17 可能带来什么新特性?
- 简单易学的深度学习算法:Wide Deep Learning
- 使用NoSQL实现实体服务–第2部分:合同优先
- vb.net 窗体接收键盘事件_(十五)C#WinFrom自定义控件系列-键盘(二)
- 洛谷 4178 Tree——点分治
- Leetcode每日一题:197.rising-temperature(上升的温度)
- 需要额外端口信息_使用Python进行TCP端口扫描
- FastSpring.NET V2.05 final 发布[集成Spring.net NHibernate Ajax]
- 基于FPGA的多人表决器(VHDL)
- 关于NSIS脚本操作静默安装第三方程序+判断电脑位数
- 白话Android音频系统原理
- 计算学习理论PAC模型
- C#中indexof和substring函数用法 (截取字符串)
- HTTPS中间人攻击实验
- 前端基础第三天项目 大事件后台管理系统
- ArcGIS介绍:ArcObjects、 ArcGIS Desktop、ArcGIS Engine 和 ArcSDE、ArcIMS、ArcGIS Server
- 基于python的马尔科夫链在股价预测中的应用(基于Tushare)
- 如何通过引用传递变量?
- docker jvm调优 tomcat_docker+tomcat 启动时非常慢原因之JRE /dev/random阻塞
热门文章
- 如何快速构建嵌入式全栈知识体系?
- 这个结构体对齐输出有意思
- 语言与golang语言运行速度_Golang语言情怀第13期 Go 语言设计模式 介绍
- mac系统如何进入系统偏好设置_MacOS Big Sur 系统偏好设置无法解锁Bug解决
- C++ —— 初识C++
- cesium 页面截图_Cesium开发入门篇 | 02开发环境搭建及第一个示例
- 广联达文件被锁怎么修复_事无巨细的绕过Apple id教程+修复蜂窝数据/电话
- tinyxml2遍历所有节点_Python实现二叉树的遍历
- Nodejs 操作 MongoDb 数据库
- fastapi 响应模型 / 响应状态码 / 表单参数