【Android Developers Training】 16. 暂停和恢

系统 2119 0

注:本文翻译自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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论