说明:本文是我本身对官方入门教程(Training)的翻译,仅仅是为了记录本身的学习过程。因为本人英语水平过低,基本上是靠金山词霸加上本身的理解,因此翻译的很差。若是你有好的意见请留言,谢谢! java
暂停和恢复Activity(Pausing and Resuming an Activity) 数据库
在正常的应用程序使用,前台activity有时会被其余可视化组件遮挡,从而形成activity的暂停。例如,当一个半透明的activity打开时(如在一个风格对话框),之前的activity就暂停了。只要activity仍然是部分可见,但目前没有得到焦点,它就依然处于暂停状态。 ide
然而,一旦activity被彻底遮挡住,而且对用户不可见了,那么它就中止了(这是下一课须要讨论的内容)。 学习
当你的activity进入暂停状态,系统将对你的Activity调用onPause()方法。在此方法中,你能够中止那些在暂停状态时不该该继续进行的行为(如视频播放),或者持久化一些须要永久保存的信息,以使得用户继续留在你的应用程序。若是用户返回到你的activity,系统将从暂停状态中恢复它,并调用onResume()方法。 动画
注意:当你的activity接收到一个对onPause()的调用时,它多是一个迹象,代表activity将暂停一下子,而后用户还会返回到你的activity。然而,它一般是第一个迹象,代表用户正在离开你的activity。 spa
图1。当一个半透明的activity掩盖了你的activity,系统就会调用onPause(),activity等在暂停状态(1)。若是用户返回到仍处于暂停状态的activity,系统就会调用onResume()(2)。 翻译
暂停你的Activity(Pause Your Activity) code
当系统为你的activity调用onPause()时,从技术上讲,你的activity仍然是部分可见的,但最多见的是代表用户正在离开这个activity,而且它也将很快进入中止(Stopped)状态。你应该一般使用onPause()回调:
中止动画效果或者其余正在进行地消耗CPU资源的行为。
提交还没有保存的更改,但前提是用户但愿这样处理:当他们离开时,须要将所作的变更作一个永久地保存(如撰写电子邮件)。
释放一些系统资源,例如广播接收器,处理传感器(如GPS),或任何会影响电池寿命的资源,而与此同时你的activity又被暂停了,用户再也不须要这些资源。 视频
举个例子,若是你的应用程序使用了照相机,那么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()去将用户的变动(如我的信息输入形式)保存到持久化的存储中。只有当你肯定用户指望的是自动保存其所作的变动(如起草一个电子邮件)时,你才能够在onPause()方法中将用户的这种变动写到持久化存储中。然而,你应该避免在onPause()中执行CPU高负荷工做,如读写数据库,由于它会减缓到下一个activity的过渡动做(你应该在onStop()中执行重负荷关闭动做)。
你应该保持业务量在onPause()方法相对简单,为了让一个快速过渡到用户的下一个目的地,若是你的activity其实是被中止。
注意:当你的activity暂停时,该Activity实例还驻留在内存中,而且在activity恢复时再被从新调用。你在调用任何回调方法转变到恢复状态时,不须要从新初始化那些已经建立了的组件,。
恢复你的Activity(Resume Your 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 } }