博客
关于我
App的启动过程(2)framework侧-恢复最上层的Activity
阅读量:670 次
发布时间:2019-03-16

本文共 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)开始执行。

转载地址:http://ojeqz.baihongyu.com/

你可能感兴趣的文章
Stream 某些API
查看>>
测试调用另一台电脑ip是否有用
查看>>
mos-excel集成文档
查看>>
chat 快问!
查看>>
6.Xml
查看>>
Linux总结
查看>>
DKT—Going Deeper with Deep Knowledge Tracing
查看>>
响应的HTTP协议格式+常见的响应码
查看>>
创建线程方式
查看>>
LRUCache
查看>>
关于Linux系统中touch命令的说明
查看>>
将windows里的内容直接复制粘贴到ubuntu,提高效率
查看>>
将tomcat设置成window自启动服务
查看>>
webservice 远程服务器返回错误:(400)错误的请求
查看>>
[日常] PHP与Mysql测试kill慢查询并检验PDO的错误模式
查看>>
[PHP] try catch在日常中的使用
查看>>
[Linux] 进程间通信
查看>>
[PHP] error_reporting(0)可以屏蔽Fatal error错误
查看>>
C++ Primer Plus【复习笔记】-【复合类型】
查看>>
thinkphp 的一些重要知识点
查看>>