Red de conocimiento del abogados - Ley de patentes - Proceso de inicio de actividad

Proceso de inicio de actividad

Código fuente relacionado:

Llame a startActivity o startActivityForResult para iniciar la actividad. Luego, hay dos situaciones para iniciar una Actividad: la primera es iniciar una Actividad en el mismo proceso; la segunda es iniciar una Actividad raíz de un proceso diferente. Por ejemplo, hacer clic en Iniciar aplicación en el escritorio es iniciar una Actividad de. un proceso diferente. El proceso de inicio de la Actividad en estos dos casos es aproximadamente el mismo, y el proceso consta aproximadamente de los siguientes tres procesos:

Los tres procesos principales se explican uno por uno a continuación:

La siguiente figura muestra el proceso de llamada a system_server El proceso de un proceso que inicia una solicitud:

El método startActivityForResult continúa llamando al método Instrumentation.execStartActivity. La clase Instrumentación se utiliza principalmente para monitorear la interacción entre aplicaciones y sistemas.

La siguiente imagen muestra cómo ATMS maneja el proceso startActivity y devuelve la llamada al ApplicationThread del proceso de inicio

ATMS startActivity:

La clase ATMS finalmente llega. startActivityAsUser a través de una serie de llamadas a métodos. Este método primero verifica los permisos del proceso de llamada, luego crea la clase ActivityStarter a través de getActivityStartController().obtainStarter, establece los parámetros para la clase ActivityStarter.Request y finalmente ejecuta el método ActivityStarter.execute() .

ActivityStarter prepara la pila

En el método ActivityStarter.executeRequest, primero se realizan una serie de comprobaciones, incluida la comprobación del proceso de llamada, la comprobación de la intención, la comprobación de los permisos y la obtención de la información para Inicie la actividad desde PKMS ActivityInfo y otra información, y luego llame al método startActivityUnchecked para iniciar la administración de la pila de la actividad que se va a iniciar.

En el método startActivityInner, el indicador se calcula en función del modo de inicio y el ActivityRecord de la actividad iniciada en función del indicador y otras condiciones se agrega a la pila de tareas existente o se crea una nueva pila de tareas. . Después de preparar la pila para la Actividad, llame al método RootWindowContainer.resumeFocusedStacksTopActivities

Gestión de la pila de ActivityStack:

Para el ActivityStack correspondiente a la Actividad de inicio, es para administrar la lógica de visualización de la Actividad en su pila.

Luego continúe llamando a ActivityStackSupervisor.startSpecificActivity

ActivityStackSupervisor verifica el proceso de inicio y devuelve la llamada ApplicationThread

En ActivityStackSupervisor, primero verifique si el proceso para iniciar la Actividad existe. Si no existe, créelo. El proceso, si existe, llama a realStartActivityLocked. El método realStartActivityLocked vuelve a llamar al método ApplicationThread a través de una transacción.

La siguiente figura es el diagrama de secuencia del proceso de inicio de la Actividad mediante ActivityThread:

La clase ApplicationThread da vueltas en un gran círculo y finalmente llama al método de ejecución de CallBack del conjunto ClientTransaction. en la etapa ATMS, que es el método de ejecución LaunchActivityItem, este método crea un objeto ActivityClientRecord y luego llama a ActivityThread para iniciar el inicio real de Actvity.

Iniciar realmente la Actividad: