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中移除。
在确定需要启动新的Activity后,有两种情况:
这种情况下,首先需要通知WindowManager更新全局变量,标记该Activity已归档。然后通过app.thread.scheduleResumeActivity开始恢复该Activity。
此时需要启动目标进程,并通过mStackSupervisor.startSpecificActivityLocked进行操作。
进程的启动主要由ActivityManagerService中的startProcessLocked方法负责。该方法通过zygote启动新的进程,并通过entryPoint加载ActivityThread主线程。
在应用进程端,attachApplicationLocked方法负责将新进程与ActivityStackSupervisor关联。通过调用app.thread.scheduleLaunchActivity接下来的Activity生命周期(create—start—resume)开始执行。