Android开发第2-2课:暂停和恢复一个Activity
本课程将会教你
在普通的app使用过程中,前台的 activity有时候会被其他的可视组件阻碍从而导致activity暂停。例如,当打开一个半透明的 activity (例如对话框),前一个activity就会暂停。 只要activity还可见,但是当前activity并不再焦点中,它就保持暂停。
然而,一旦activity被完全的阻碍并且不可视,他就停止了 (在下一课中将会对此进行讨论)。
当你的activity进入暂停状态,系统将会在你的Activity中调用onPause() 函数,它使得你可以停止正在运行的动作,这些动作在paused就应该结束(例如视频) 或者保留任何应该永久保存的信息以防用户推出你的app。 如果用户从paused状态中返回你的activity,系统通过调用onResume()来使其恢复。
注意: 当你的activity接到onPause()的调用,这可能意味着你的activity暂时被暂停,但是用户稍后会返回。然而,更多情况下,意味着用户将要离开你的activity。
Figure 1. 当一个半透明activity遮掩了你的activity,系统将调用onPause() 并且activity在Paused状态中等待。如果用户在暂停状态中返回activity系统将会调用onResume()。
暂停你的Activity
当系统为你的activity调用onPause() 时, 从技术上说,这意味着你的activity还部分可视,但更多是意味着用户将要离开这个activity并且很快就进入Stopped状态。你应该使用onPause()来:
- 停止活跃或者其它正在运行的会消耗CPU的动作。
- 提交未保存的变化,但只有用户希望保存变化的时候才会这么做(例如email草稿)。
- 释放系统资源,例如广播接收器,她控制着传感器 (像GPS),或者在app运行的时候,用户并没有用到的任何其他会影响到电池寿命的资源。
例如,如果你的应用使用了摄像头,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组件使其恢复到Resumed恢复状态。
恢复你的Activity
等用户从Paused状态恢复到你的activity时,系统将会调用onResume() 函数。
要注意的的是,每次你的activity进去前台系统调都会用这个函数,包括第一次创建的时候。例如,你应该实现onResume() 来初始化你在onPause()中释放的组件,并且执行每当activity进入Resumed状态时都必须执行的操作(例如启动一个动画并且在activity获得焦点都的时候初始化要用到的组件)。
下面的onResume()例子是对应于上面onPause()例子的副本,所以他将初始化在暂停中释放的摄像头。
@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
}
}

浙公网安备 33010602011771号