• [Android Training视频系列]2.2 Pausing and Resuming an Activity


    1.主要内容
    本讲介绍onPause和onResume,主要分析了在onPause函数中应该执行哪些操作。

    2.视频讲解

    http://www.eyeandroid.com/thread-11291-1-1.html

    3.翻译参考

    在正常的程序使用中,处于前台运行的activity有时会被另外一些可见的组件遮挡,从而造成activity被暂停。比如,一个半透明的activity(类似一个对话框)被打开,先前那个activity就会被暂停。虽然这个activity还有部分可见,但是当前的焦点不在这个activity上,因此它保持在paused状态。

     
    不过,一旦这个activity被全部遮挡,处于不可见的状态,那么它就是被停止了。(下个教程讨论)
     
    如果你的activity要进入paused状态,系统会调用你的activity种的onPause()方法,这个方法让你能够暂停那些不应该继续运行的行为(比如暂停视频播放),或者保存那些应该永久保存的用户数据。一旦用户从paused状态返回,系统能够调用onResume()方法恢复以前的运行。
     
    提示:当activity接收调用onPause()时,这可能表明activity要暂时进入paused状态,用户可能马上就重新获得activity的焦点。但是,它也是用户离开这个activity时会调用的第一个方法。
    basic-lifecycle-paused.png
    图解:当一个半透明的activity覆盖你的activity时,系统调用onPause(),activity就会在Paused状态中等待(1)。系统调用onResume()方法返回activity。
     
    暂停你的activity

    当系统调用onPause()方法的时候,技术上说明activity还是能部分可见的,但是大部分情况表明用户要离开activity,它将进入Stopped状态。你通常使用onPause()函数做下面的事:
    • 停止消耗cpu的动画或者运行中的动作。
    • 提交未保存的更改,但是只是保存用户离开后期望永久保存的东西(比如邮件草稿)。
    • 释放系统资源,比如广播接收器,传感器(比如GPS),或者消耗电量的资源,这些资源是activity暂停后用户不再需要的。
    例如,如果你的程序需要使用摄像头,onPause()方法中是释放它的好地方。

     
    1. @Override  
    2. public void onPause() {  
    3.     super.onPause();  // 通常先调用父类方法  
    4.   
    5.     // 释放摄像头资源  
    6.     if (mCamera != null) {  
    7.         mCamera.release()  
    8.         mCamera = null;  
    9.     }  
    10. }  

    通常情况下,你不需要使用onPause()方法储存用户的修改(比如填写信息的表单)到固定存储器。只有在用户真的期望自动保存数据(比如邮件草稿)的时候才需要在onPause()方法中保存。你应该尽量避免在onPause()方法中让CPU进行密集的工作,比如写入数据到数据库,因为这样会减慢你进入下一个activity的速度(你应该在onStop()中执行这些高负载的关闭操作)。
     
    如果你的activity确实需要被停止话,你应该保持你onPause()方法尽量的简单,这样能够保证快速的转换到用户的下一个目的地。
     
    提示:当你的activity已经被paused,这个activity实例会被保持在内存中,当activity需要被恢复的时候被调用。你不需要再重新初始化组件。
     
    恢复你的activity

    当用户从Paused状态恢复你的activity的时候,系统调用onResume()函数。
     
    需要了解的是activity每次进入前台都会调用这个方法,包括activity被第一次创建的时候。这样的话,你必须在onResume()方法中初始化那些onPause()中释放的组件,并且执行任何需要在Resumed状态中需要的初始化工作。(比如开始动画和初始化activity前台状态需要的组件)
     
    下面的例子和上面onPause()的例子相对应,这里初始化暂停时释放的摄像头资源。
     
    1. @Override  
    2. public void onResume() {  
    3.     super.onResume();  // 调用父类方法  
    4.   
    5.     // 当activity取得用户焦点时取得摄像头实例  
    6.     if (mCamera == null) {  
    7.         initializeCamera(); // 摄像头初始化的本地方法  
    8.     }  
    9. }  
  • 相关阅读:
    HDU2027 统计元音 一点点哈希思想
    湖南工业大学第一届ACM竞赛 数字游戏 字符串处理
    湖南工业大学第一届ACM竞赛 我素故我在 DFS
    HDU3293sort
    HDU2082 找单词 母函数
    HDU1018 Big Number 斯特林公式
    湖南工业大学第一届ACM竞赛 分糖果 位操作
    UVA 357 Let Me Count The Ways
    UVA 147 Dollars
    UVA 348 Optimal Array Multiplication Sequence
  • 原文地址:https://www.cnblogs.com/eyeandroid/p/2817377.html
Copyright © 2020-2023  润新知