Activity生命周期 之 暂停和恢复Activity

时间:2021-05-24 03:54:39
在正常的app使用中,前台运行的activity有时候会其他可见组件遮盖掉,从而导致这个activity进入暂停(paused)状态。比方说,在一个activity上打开一个半透明的activity(一半利用它来作为一种对话框,背景透明),那么这个activity虽然是可见的,但是已经进入了pause状态,因为它已经被这个新的activity覆盖了,能看到它仅仅是因为覆盖它的activity是半透明背景。
然后当一个activity被完全遮盖不可见的时候,这个activity就进入了停止(stopped,这个我在下一节讨论)状态。
当你的activity进入paused状态的时候,系统会调用你的Activity,onPause()方法,这个方法会里面允许你的activity在paused 状态下停止当前的动作,或者是在用户长时间离开这个activity的时候,长久的保持一些用户离开这个activity时候的信息,当然用户恢复到这个的界面的时候,系统调用onResume() 方法,还原信息。
注意:当系统调用你的activity的函数onPause()的时候,就表示你的activity将要被暂停一会而, 也许用户一会会切回到这个界面。这个函数通常是用户离开你的activity的时候的第一个调用函数。
图示1:Activity生命周期  之  暂停和恢复ActivityActivity生命周期  之  暂停和恢复Activity当一个半透明或者局部的视图遮住我们的activity的时候,系统会调用执行activity的onPause()函数,activity会停止在Paused状态。如果用户再次返回到activity界面,这个时候如果activity处在Paused状态,系统会调用 onResume().

暂停你的APP当系统调用onPause() 函数的时候,从技术角度来说,这个activity还是部分可见的。但更多情况下来说,是表明用户正在离开当前的activity,马上就会进入Stopped状态,我们应该利用onPause函数来:
停止动画播放或者其他消耗CPU资源的动作提交未保存的工作,但是这个仅仅在在用户希望他们离开这个界面的时候依旧被长久保存的工作(比方说写了一半的邮件草稿)释放系统资源,比方说广播接收器,对传感器的处理(如GPS),以及任何在Paused的时候用户不需要的,可能引起电池消耗的资源。比方说你的应用在使用 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函数里面长久的保存用户未完成的工作到存储器,比方说一个没填写完成的联系人的表格。除非用户希望他未完成的事情在Paused状态的时候被自动保存。其他情况下,你要努力避免在onPause函数里面进行比较耗CPU的工作,比方说写数据库,因为这个可能会减慢显示下一个activity的速度(你应该在onStop函数里面进行高负载度的工作)为了让用户在stop你当前的activity,切换到下个activity的时候,切换过程尽可能的流畅,你要努力保持你的onPause函数里面的内容相对的简单一些,不要太复杂,耗时。注意:当我们的activity助于Paused的时候,我们的这个activity的实例还是被继续存放在手机的内存里面,当我们resume的时候,会重新调用这个实例。我们不需要去再次初始化那些首次启动的时候在onResume函数之前初始化的那些数据。
恢复你的Activity
当我们从Paused恢复我们的activity的时候,系统会调用onResume()函数。每次当我们的activity运行到前台的时候,系统都会调用这个函数,包括第一次创建这个activity的实例并启动的时候。所以你要在onResume里面初始化那些你在onPause里面释放的内容,执行那些必须在activity进入Resumed
状态时候要处理的代码(比方说开始播放动画,或者是初始化那些只有在activity有焦点,处于前台运行时候的内容)
下面的onResume例子是对于上面的onPause例子,它会初始化上面在onPause时候被释放的camera