zoukankan      html  css  js  c++  java
  • [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. }  
  • 相关阅读:
    java虚拟机学习-JVM调优总结-基本垃圾回收算法(7)
    学习笔记-人脸识别第三讲
    小波变换基础理论
    小波变换图像分解
    图像的纹理区域分类
    matlab中图片数据类型转换uint8与double
    八板体-器乐曲
    【歌词】金蛇狂舞-许笑薇-童声
    【歌词】金蛇狂舞-龙飘飘
    NLM算法
  • 原文地址:https://www.cnblogs.com/eyeandroid/p/2817377.html
Copyright © 2011-2022 走看看