Activity是Android四大组件之一,大多数Android应用都有若干个Activity。在C++或者java程序中,应用是通过main()方法启动的,但是Android系统不同,它会调用生命周期特定阶段对应的回调方法启动Activity。

Activity有下面七个生命周期回调方法:

onCreate()

这个回调方法必须实现,它会在系统创建Activity的时候触发。通常在此方法中,需要初始化Activity的基本组件,比如创建视图以及绑定数据列表。在此方法中,调用setContentView()方法定义该Activity的布局。

onStart()

完成onCraete()方法后,Activity对用户可见,进入已启动状态。

onResume()

此回调方法会在Activity与用户进行交互之前调用,此时,Activity位于栈顶,一个Activity的大部分核心功能都是在onResume()中实现的。

onPause()

当Activity失去焦点并且进入已暂停状态,就会调用onPause()方法。此时,Activity可能可见,如切换页面或者分屏显示的时候。可以理解为用户正在离开该Activity。当onPause()执行完毕后,视情况将回调onStop()或者onStart()方法。下面是一些调用onPause()的情况:

  • 当某个事件中断应用执行(最常见)。
  • 在 Android 7.0(API 级别 24)或更高版本中,有多个应用在多窗口模式下运行。无论何时,都只有一个应用(窗口)可以拥有焦点,因此系统会暂停所有其他应用。
  • 有新的半透明 Activity(例如对话框)处于开启状态。只要 Activity 仍然部分可见但并未处于焦点之中,它便会一直暂停。

onStop()

当Activity对用户不可见时,会调用onStop()方法。当Activity被销毁或者现有Activity被其他Activity覆盖,都会对用户不可见。如果Activity重新与用户交互,下一个回调就是onReStart();如果Activity彻底被销毁,下一个回调就是onDestroy()。

onRestart()

当处于已停止状态的Activity即将重新启动时,系统会执行此回调方法,当执行完成,Activity会回到停止时的状态。

onDestroy()

在销毁Activity之前会执行此回调。实现onDestroy()是为了确保销毁Activity或者销毁所在进程的时候释放资源。

生命周期示意图

onActivityResult 在哪两个生命周期之间回调 activity的生命周期及回调方法_android

生命周期演示

在Activity的每一个生命周期回调中打印log:

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivityLifecycle";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, "onCreate");
    }
    //生命周期函数

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "onDestroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "onRestart");
    }
}

启动程序时

E/MainActivityLifecycle: onCreate
E/MainActivityLifecycle: onStart
E/MainActivityLifecycle: onResume

此时会依次执行onCreate、onStart、onResume方法,Activity可以进行交互。

切换应用时(未选择其他应用)

E/MainActivityLifecycle: onPause
E/MainActivityLifecycle: onStop

此时,将依次调用onPause以及onStop方法,此时用户不可以与Activity进行交互。接着,返回到原应用,则会调用以下方法:

E/MainActivityLifecycle: onRestart
E/MainActivityLifecycle: onStart
E/MainActivityLifecycle: onResume

使得Activity重新可以进行交互。而如果不返回原应用,而是删除该Activity对应应用的任务,则会调用以下方法:

E/MainActivityLifecycle: onDestroy

销毁该Activity。此时,Activity的七个生命周期回调都经历了。

分屏显示时

在 Android 7.0(API 级别 24)或更高版本中,可以有多个应用在多窗口模式下运行。这里,我们同时允许两个应用分屏,此时,焦点在MainActivity中,当点击另外一个应用时:

E/MainActivityLifecycle: onPause

这里,不会调用onStop,因为MainActivity对我们完全去可见,只是失去了焦点而已。当重新点击MainActivity时执行以下方法:

E/MainActivityLifecycle: onResume

也即使焦点重新回到MainActivity。