App的启动过程(2)framework侧-恢复最上层的Activity
发布日期:2021-05-19 23:22:03 浏览次数:11 分类:精选文章

本文共 1301 字,大约阅读时间需要 4 分钟。

Android Activity启动流程分析

在Android系统中,当需要启动新的Activity时,ActivityManagerService(AMS)负责协调相关操作。下面将重点分析启动过程中的关键流程和机制。

Activity启动的关键处理流程

启动Activity的过程涉及多个层面,主要流程如下:

1.ActivityStackSupervisor的作用

ActivityStackSupervisor( distract-supervisor)是负责管理Activity堆栈的核心类。其中的关键方法包括resumeFocusedStackTopActivityLocked和resumeTopActivityInnerLocked等。

2. resumeFocusedStackTopActivityLocked的处理

该方法主要负责恢复最上层的Activity记录。在启动新的Activity之前,需要先恢复当前正在运行的Activity。该方法首先通过mTaskHistory和mActivities获取最上面的有效ActivityRecord。

3. 进入resumeTopActivityUncheckedLocked

该方法是resumeTopActivityLocked的下一步,它会调用resumeTopActivityInnerLocked进行进一步处理。

4. resumeTopActivityInnerLocked的处理流程

该方法首先检查目标Activity的状态,如果目标Activity已经处于RESUMED状态,则无需重复启动。如果目标Activity正在停止,则需要从mStoppingActivities、mGoingToSleepActivities和mWaitingVisibleActivities中移除。

5. Activity的启动逻辑

在确定需要启动新的Activity后,有两种情况:

a. Activity所属进程已在运行

这种情况下,首先需要通知WindowManager更新全局变量,标记该Activity已归档。然后通过app.thread.scheduleResumeActivity开始恢复该Activity。

b. Activity所属进程未在运行

此时需要启动目标进程,并通过mStackSupervisor.startSpecificActivityLocked进行操作。

6. 进程启动机制

进程的启动主要由ActivityManagerService中的startProcessLocked方法负责。该方法通过zygote启动新的进程,并通过entryPoint加载ActivityThread主线程。

7. 应用进程端的处理

在应用进程端,attachApplicationLocked方法负责将新进程与ActivityStackSupervisor关联。通过调用app.thread.scheduleLaunchActivity接下来的Activity生命周期(create—start—resume)开始执行。

上一篇:App的启动过程(3)应用进程侧-主线程的处理
下一篇:App的启动过程(1)framework侧-startActivity的判断处理流程

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月28日 06时29分47秒