返回

深入剖析Android 8.0 Activity启动流程之详细回调

Android

引言

在上一篇文章中,我们介绍了应用进程请求AMS启动Activity的过程和Activity在AMS中的启动过程。我们还留下了一个问题:Activity的生命周期方法是如何被回调的?

本文将通过分析ActivityThread中的相关代码,详细解析Activity生命周期方法的回调过程,帮助读者深入理解Android系统Activity的启动机制。

Activity生命周期方法的回调过程

Activity的生命周期方法是在ActivityThread的handleLaunchActivity()方法中被回调的。handleLaunchActivity()方法负责处理Activity的启动请求,包括创建Activity对象、调用Activity的生命周期方法等。

handleLaunchActivity()方法的大致流程如下:

  1. 创建Activity对象
  2. 调用Activity的onCreate()方法
  3. 调用Activity的onStart()方法
  4. 调用Activity的onResume()方法
  5. 等待Activity的onPause()方法被调用
  6. 调用Activity的onStop()方法
  7. 调用Activity的onDestroy()方法

其中,步骤5是Activity生命周期方法回调过程中的一个特殊步骤。Activity的onPause()方法是在Activity失去焦点时被调用的,因此,在步骤5中,handleLaunchActivity()方法会等待Activity的onPause()方法被调用,然后才继续执行步骤6和步骤7。

Activity生命周期方法的回调时机

Activity的生命周期方法是在以下时机被回调的:

  • onCreate():当Activity第一次被创建时被调用。
  • onStart():当Activity即将变为可见时被调用。
  • onResume():当Activity完全可见时被调用。
  • onPause():当Activity即将变为不可见时被调用。
  • onStop():当Activity完全不可见时被调用。
  • onDestroy():当Activity即将被销毁时被调用。

需要注意的是,Activity的生命周期方法并不是严格按照上述顺序被调用的。例如,如果Activity在后台被销毁,那么它的onDestroy()方法会被直接调用,而不会调用onPause()和onStop()方法。

结语

本文详细解析了Activity生命周期方法的回调过程,帮助读者深入理解Android系统Activity的启动机制。读者可以结合上一篇文章的内容,对Activity的启动流程有一个更加全面的认识。