Activity的生命周期

时间:2022-01-07 14:43:55
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 void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
// The activity is being created.
   
}
   
@Override
   
protected void onStart() {
       
super.onStart();
       
// The activity is about to become visible.
   
}
   
@Override
   
protected void onResume() {
       
super.onResume();
       
// The activity has become visible (it is now "resumed").
   
}
   
@Override
   
protected void onPause() {
       
super.onPause();
       
// Another activity is taking focus (this activity is about to be "paused").
   
}
   
@Override
   
protected void onStop() {
       
super.onStop();
       
// The activity is no longer visible (it is now "stopped")
   
}
   
@Override
   
protected void onDestroy() {
       
super.onDestroy();
       
// The activity is about to be destroyed.
   
}
}
这里需要注意,每个回调函数都必须先调用父类的相应函数。

这些函数定义了activity的整个生命周期。通过实现这些函数,你可以监控activity生命周期中三个嵌套的循环。下图展示了各个状态之间的变化联系。
Activity的生命周期


从上图可以看出activity的生命周期变化:
第一条线是主线位于中间:首先onCreate创建,在由onStart启动,进入onResume运行,activity处于前台运行状态,一旦activity进入后台,就会调用onPause,如果activity不可见,会继续调用onStop,当activity被销毁时,调用onDestroy。
第二条线是重启线位于右侧:当activity处于后台不可见状态,即stopped状态,用户通过屏幕图标或者其他方式重启了该activity,这时会调用onRestart,然后在调用onStart,进入主线。
第三条线是销毁线位于左侧:这里面需要注意的是,在paused和stopped状态时,activity均有可能被系统销毁, 所以程序资源的销毁或保存不要依赖于onStop调用