【Android Developers Training】 16. 暂停和恢复一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。
原文链接:http://developer.android.com/training/basics/activity-lifecycle/pausing.html
在正常使用应用的过程中,在前台的activity有时候会被其它组件所遮挡,导致这个activity进入到暂停态。例如:当打开一个半透明activity(dialog中有这样一种风格),之前的activity会被暂停。只要这个activity仍然保持部分可见,同时当前没有获得用户焦点,它就会保持在暂停态。
然而,当一个activity被完全遮蔽,同时变得不可见,那么它将进入停止态(这块内容将在下一节课展开)。
当你的activity进入暂停态,系统将会对你的activity调用onPause()方法,这使得你可以停止那些在暂停态阶段不能继续进行的操作(比如一个正在播放的视频),或者存储一些信息,以防如果用户退出应用后丢失数据。如果用户从暂停态回到你的activity,系统会调用onResume()方法来恢复它。
Note:
当你的activity执行了onPause()方法,这表明activity可能会临时地暂停一下,用户可能会重新获得activity焦点。然而,它也通常可能意味着用户将要离开你的activity。
图1. 当一个半透明的activity遮挡了你的activity,系统会调用onPause()方法,然后activity在暂停态保持等待(1)。
如果用户回到这个activity时,activity处于暂停态,将会调用onResume()方法(2)。
一). 暂停你的Activity
当系统对你的Activity调用onPause()方法,从技术上说,这表明你的activity处于部分显示的状态,但多数情况这意味着用户将要离开activity,并且activity将要马上进入停止态。你应该经常在以下情况下使用onPause()回调函数:
- 停止那些会消耗CPU资源的动画或其它正在执行的操作
- 提交还未保存的修改(仅当用户希望当他们离开时这些变化会被永久的保存,比如:一个邮件草稿)
- 释放系统资源,比如广播接收器(broadcast receiver),对传感器(如: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()来存储用户的变更(比如在一个表单中填写的个人信息)到ROM中,只有在你确定用户期望这些改变(比如邮件草稿)应该被永久存储时,才应该在onPause()中把它们永久存储起来。然而,你应该避免在onPause()中执行大量消耗CPU资源的事务,比如写入数据库,因为这将会影响到下一个activity变化为可见状态的流畅度。(这些大量消耗资源的事务应该在onStop()方法中执行)
你应该尽量保持在onPause()中执行的操作相对简单,以此使得用户到下一个目的地的切换是流畅的(如果你的activity实际上已经进入了停止态)。
Note:
当你的activity处于暂停态,Activity实例会存储在RAM中,当这个activity恢复时,会重新从存储里调用。在activity切换到恢复态的过程中你不再需要重新初始化任何已经创建过的组件。
二). 恢复你的Activity
当用户将你的activity从暂停态恢复到恢复态时,系统会调用onResume()方法。
注意:每当你的activity来到前台时,系统都会调用这个方法,包括当它第一次被创建时。例如:你应该在onResume()中初始化那些你在onPause()方法中释放的组件,并且完成其他当activity进入恢复态时必须执行的初始化操作。(例如启动一些动画,以及初始化那些只有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 Developers Training】 16. 暂停和恢复一个Activity的更多相关文章
- 【Android Developers Training】 4. 启动另一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 18. 重新创建一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 14. 序言:管理Activity生命周期
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Android-管理Activity生命周期 -暂停和恢复一个Activity
在正常的使用app时,前台的activity有时候会被可见的组件阻塞导致activity暂停.比如,当打开一个半透明的activity(就像打开了一个对话框),之前的activity就会暂停.只要ac ...
- 【Android Developers Training】 0. 序言:构建你的第一个应用
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 17. 停止和重启一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 15. 启动一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 21. 创建一个可变动的UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 3. 构建一个简单UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- UML学习笔记之类之间的关系
1. 导航关系(Directed Association) A类有一个成员变量保存B的引用. 2.包含关系(Aggregation.Composition) (1)弱包含 含义:每个部门包含多个 ...
- 也许是目前实现最好的js模拟滚动插件
finger-mover 是一个集成 Fingerd(移动端以手指为单位的事件管理方案) 和 Moved(微型运动方案) 为一体的移动端动效平台,finger-mover 本身并不能为你做什么,但是附 ...
- Tensorflow中的padding操作
转载请注明出处:http://www.cnblogs.com/willnote/p/6746668.html 图示说明 用一个3x3的网格在一个28x28的图像上做切片并移动 移动到边缘上的时候,如果 ...
- ASP.NET Gridview数据库绑定支持增删改,记得要完整实现
1.错误情况 /WebSite3"应用程序中的服务器错误. 指定的参数已超出有效值的范围. 参数名: index 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息, ...
- C++构造函数虚函数例题
虚函数: #include <iostream> class A { public: A ():m_iVal() { test(); } virtual void func() { std ...
- 关于win10和sqlserver的兼容性
本人主要是用.NET开发一些MIS(信息管理系统)系统,如酒店管理系统,医院管理系统,以及其附属的如餐饮管理系统,洗浴管理系统,以及医保管理系统,合疗管理系统,前期开发的产品主要是VS2008+sql ...
- 用php+ajax新建流程(请假、进货、出货等)
对管理者来说,电脑操作的请假流程要比人工请假流程的效率高出很多,那么如何新建这个流程呢? 首先:需要明确需要操作哪些流程? 其次:每一个流程需要那些人员来执行? 最后:执行该流程人员的顺序是什么? ...
- 多媒体开发库 之 SDL 详解
SDL 简介 SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开发者只要用相同或是相似的 ...
- 发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
应用场景 多线程在需要批量处理一些任务的时候相当有用,也更加有利于充分利用现有计算机的能力.所有主流的开发语言都支持多线程. 默认情况下,PowerShell作为一个脚本语言,是不支持多线程操作的,虽 ...
- mysql之 mysql 5.6不停机主从搭建(一主一从)
环境说明:版本 version 5.6.25-log 主库ip: 10.219.24.25从库ip:10.219.24.22os 版本: centos 6.7已安装热备软件:xtrabackup 防火 ...