注:本文翻译自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的更多相关文章

  1. 【Android Developers Training】 4. 启动另一个Activity

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

  2. 【Android Developers Training】 18. 重新创建一个Activity

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

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

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

  4. Android-管理Activity生命周期 -暂停和恢复一个Activity

    在正常的使用app时,前台的activity有时候会被可见的组件阻塞导致activity暂停.比如,当打开一个半透明的activity(就像打开了一个对话框),之前的activity就会暂停.只要ac ...

  5. 【Android Developers Training】 0. 序言:构建你的第一个应用

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

  6. 【Android Developers Training】 17. 停止和重启一个Activity

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

  7. 【Android Developers Training】 15. 启动一个Activity

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

  8. 【Android Developers Training】 21. 创建一个可变动的UI

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

  9. 【Android Developers Training】 3. 构建一个简单UI

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

随机推荐

  1. Linux系统档案与文件系统的压缩与打包

    以下文章基于centos6.5 文章引自:http://www.jb51.net/LINUXjishu/105916.html 一.Linux下常见的压缩指令 在linux的环境中,压缩文件的扩展名大 ...

  2. EntityFramework中出现DateTime2异常的完美解决办法

    今天在使用entityframework往数据库插入数据的时候,突然出现了一个数据类型转换异常的问题: System.Data.SqlClient.SqlException: 从 datetime2 ...

  3. Javascript开发技巧(JS中的变量、运算符、分支结构、循环结构)

    一.Js简介和入门 继续跟进JS开发的相关教程. <!-- [使用JS的三种方式] 1.HTML标签中内嵌JS(不提倡使用): 示例:<button onclick="javas ...

  4. Bitwise And Queries

    Bitwise And Queries Time limit: 1500 msMemory limit: 128 MB You are given QQ queries of the form a\ ...

  5. nginx-tomcat-memcached架构文档说明(转)

    800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 st1\:*{be ...

  6. Java中关键词之this,super的使用

    一.this关键词介绍. 说明:该知识点仅仅限于本人对其了解的范围. package com.study.java.oop; /** * 核心点:"this是指向对象本身的一个指针" ...

  7. 手把手教你用Eclipse+TestNG搭建接口自动化测试框架

    转载于:http://qa.blog.163.com/blog/static/190147002201510275306185/ 把群博里关于接口自动化的文章都看了一遍,都是关于测试过程中遇到的问题及 ...

  8. $(obj).index(this)与$(this).index()异同讲解

    $(this).index()在使用jQuery时出镜率非常高,在编写选项卡及轮播图等特效时经常用到,但$(obj).index(this)似乎有点陌生. 为便于理解,以下分两个使用场景加以分析. 场 ...

  9. 是时候开始用C#快速开发移动应用了

    从2015年接触Xamarin到至今已经2个年头,我对Xamarin的技能没有长进多少,但它却已经足够成熟到在跨平台移动开发工具中占有一席之地.在扫了一些资料之后,突然发现国外有很多移动端的应用已经是 ...

  10. sql 中三大范式详解

     1 第一范式(1NF)    在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库.     所谓第一范式(1NF)是指数据库表的每一列 ...