Activity有三种本质的状态
- Resumed
activity在屏幕前台,拥有焦点,这个状态有时也称为running
- Paused
另一个activity在前台并且拥有焦点,但是此activity仍然是可见的时,此activity处于Paused状态。也就是说,另一个activity在这个activity的上面,但它是半透明的或者是只遮挡了此activity的一部分,这时此activity也是可见的。这时此activity仍然是完全存活状态,但是当系统处于极低内存的情况下可能被杀掉。
- Stopped
这个activity完全被另一个activity遮挡。这时activity处于部分存活状态。当系统需要内存的时候可能被杀掉(被杀掉的优先级高于Paused状态)。
当一个activity处于paused或者stopped状态时,系统可能会为了回收内存而销毁它,系统销毁它的方式有两种,一种是通过调用activity的finish()函数,另一种是直接杀掉进程。当这个activity再次被打开的时候,它必须重新创建。
实现生命周期回调函数
当activity的状态发生变化的时候,系统会调用相应的回调函数。下面是生命周期函数的基本骨架:
public class ExampleActivity extends Activity {
@Override
public voidonCreate
(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The activity is being created.
}
@Override
protected voidonStart()
{
super.onStart();
// The activity is about to become visible.
}
@Override
protected voidonResume()
{
super.onResume();
// The activity has become visible (it is now "resumed").
}
@Override
protected voidonPause()
{
super.onPause();
// Another activity is taking focus (this activity is about to be "paused").
}
@Override
protected voidonStop()
{
super.onStop();
// The activity is no longer visible (it is now "stopped")
}
@Override
protected voidonDestroy()
{
super.onDestroy();
// The activity is about to be destroyed.
}
}
这里需要注意,每个回调函数都必须先调用父类的相应函数。
这些函数定义了activity的整个生命周期。通过实现这些函数,你可以监控activity生命周期中三个嵌套的循环。下图展示了各个状态之间的变化联系。
从上图可以看出activity的生命周期变化:
第一条线是主线位于中间:首先onCreate创建,在由onStart启动,进入onResume运行,activity处于前台运行状态,一旦activity进入后台,就会调用onPause,如果activity不可见,会继续调用onStop,当activity被销毁时,调用onDestroy。
第二条线是重启线位于右侧:当activity处于后台不可见状态,即stopped状态,用户通过屏幕图标或者其他方式重启了该activity,这时会调用onRestart,然后在调用onStart,进入主线。
第三条线是销毁线位于左侧:这里面需要注意的是,在paused和stopped状态时,activity均有可能被系统销毁,
所以程序资源的销毁或保存不要依赖于onStop调用。