跟Google学习Android开发-起始篇-管理活动的生命周期(2)

来源:互联网 发布:java获取本地图片路径 编辑:程序博客网 时间:2024/04/30 10:29

2.2暂停和恢复活动


在应用程序的正常使用过程中,位于前台的活动有时会被其他可视组件遮挡,导致活动暂停。例如,当打开一个半透明的活动(如一个对话框样式的活动)时,之前的活动就会暂停。只要活动仍然是部分可见的,但又不是当前的焦点活动,它会保持暂停。

然而,一旦活动被完全遮挡和不可见时,它就会停止(在下一课中讨论)。

在您的活动进入暂停状态时,系统调用活动onPause()方法,它允许你停止正在进行的行动,这些行动不应该暂停时继续(比如视频),或保存任何应永久保存的信息,以防用户接着离开您的应用程序。如果用户从暂停状态返回到你的活动,系统会恢复它并调用 onResume()方法。

注意:当你的活动接到一个onPause()方法的调用,它可能表明该活动将被暂停一会儿,然后用户可能重新返回到您的活动。然而,它通常还是用户离开你的活动的第一个迹象。


1半透明的活动遮挡你的活动时,系统调用onPause()方法,而活动在暂停状态(1)处等待。如果用户返回时,活动仍处于暂停状态时,系统会调用onResume()方法2)。


暂停你的活动


当系统为您的活动调用onPause()方法,它在技术上意味着你的活动仍是部分可见,但最常见的是一个迹象是,用户正在离开活动,面活动很快将进入停止状态。通常你应该为以下目的使用onPause()回调方法:

·      停止动画或其他正在进行的可能消耗CPU的行动

·      提交未保存的更改但只在用户希望在他们离开时永久保存这样的变化的情况下如电子邮件草稿

·      释放系统资源如广播接收器处理传感器GPS或任何可能会影响电池寿命的当您的活动被暂停用户并不需要他们的资源

例如,如果您的应用程序使用Camear类,onPause()方法是一个好释放它的地方。

@Override
public void onPause(){
    super.onPause();  // Always call the superclass method first

    // Release theCamera because we don't need it when paused
    // and otheractivities might need to use it.
    if (mCamera!= null){
        mCamera.release()
        mCamera = null;
    }
}

一般情况下,你应该使用onPause()来存储用户的变化(如表单中填写的个人信息)到永久存储。你唯一要用onPause()方法坚持永久存储用户更改,是当你确保用户期望那些更改被自动保存(如起草一封电子邮件时)。然而,你应该在避免在onPause()方法中执行CPU密集型工作,如写入数据库,因为它会减缓到下一个活动可视化转化(你应该onStop()方法执行期间重载关闭操作 )。

你应该保持onPause()方法中的一系列操作相对的简单,让用户在你的活动实际上是被停止时能快速转到下个目标。

注:当你的活动被暂停时,活动实例继续驻留在内存中,并在活动恢复时重新召回。在回到恢复状态时,你不需要重新初始化任何在回调方法中创建的组件。


恢复你的活动


当用户从暂​​停状态恢复您的活动时,系统会调用onResume()方法。

注意系统在您的活动每次来到前台时调用此方法,包括活动第一次被创建的时候。因此,你应该实现onResume()来初始化那些在onPause()期间释放的组件,并执行任何其他每次进入恢复状态必须发生的初始化,(例如只用于活动获得用户焦点时的开始动画和初始化组件)。

下面例子的onResume()方法是对应上面例子的onPause(),所以它初始化活动暂停时释放的相机对象。

@Override
public void onResume(){
    super.onResume();  // Always call the superclass method first

    // Get theCamera instance as the activity achieves full user focus
    if (mCamera== null){
        initializeCamera(); // Local method to handle camera init
    }
}

原创粉丝点击