返回

揭秘AMS源码:onActivityResult背后的秘密

Android

作为Android开发人员,你可能经常使用startActivityForResult()方法来启动Activity,并在目标Activity完成后通过onActivityResult()方法接收返回结果。但你是否曾想过onActivityResult()是如何工作的?它在AMS(ActivityManagerService)源码中是如何实现的?

在本文中,我们将踏上AMS源码之旅,揭秘onActivityResult()的执行过程。我们将从startActivityForResult()方法出发,逐步深入AMS源码,了解onActivityResult()是如何被调用和执行的。

onActivityResult() 执行过程剖析

1. startActivityForResult()方法

startActivityForResult()方法是启动Activity的关键,它位于Activity类中。当我们调用startActivityForResult()方法时,它会启动一个新的Activity,并在目标Activity完成后通过onActivityResult()方法接收返回结果。

2. AMS源码分析

为了了解onActivityResult()的执行过程,我们需要深入AMS源码。AMS是Android系统中负责管理Activity生命周期的核心服务,它位于frameworks/base/services/core/java/com/android/server/am/目录下。

3. ActivityStackSupervisor类的作用

在AMS源码中,ActivityStackSupervisor类负责管理Activity栈。当我们调用startActivityForResult()方法时,ActivityStackSupervisor会创建一个新的ActivityRecord对象,并将其添加到Activity栈中。ActivityRecord对象包含了Activity的各种信息,例如Activity的类名、Intent等。

4. ActivityManagerInternal类的作用

ActivityManagerInternal类是AMS内部的一个接口,它提供了对AMS的各种方法的访问。当我们调用startActivityForResult()方法时,AMS会通过ActivityManagerInternal接口调用startActivity()方法启动一个新的Activity。

5. ActivityThread类的作用

ActivityThread类是Android系统的主线程,它负责管理Activity的生命周期。当AMS调用startActivity()方法时,ActivityThread会创建一个新的Activity实例,并调用其onCreate()方法。

6. onActivityResult()方法的调用

当目标Activity完成并返回时,它会调用setResult()方法设置返回结果,然后调用finish()方法结束自身。当目标Activity结束时,ActivityThread会调用onActivityResult()方法,并传递返回结果和请求码。

结语

通过对AMS源码的分析,我们了解了onActivityResult()的执行过程。我们看到,onActivityResult()方法的调用涉及到AMS、ActivityStackSupervisor、ActivityManagerInternal、ActivityThread等多个类。这些类共同协作,确保了Activity之间的交互能够顺利进行。