博客
关于我
App的启动过程(2)framework侧-恢复最上层的Activity
阅读量:668 次
发布时间: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/

你可能感兴趣的文章
Python svm 支持向量机
查看>>
OpenStack 最小化安装配置(一):物理机网桥配置
查看>>
PS快速美白照片
查看>>
ubuntu 16.04 镜像下载
查看>>
CUDA9.1、cuDNN7在Ubuntu16.04上的安装
查看>>
解决“预编译器错误:代码使用了scss/sass语言,但未安装相应编译器,请在菜单工具-插件安装里安装相应编译插件”
查看>>
微信小程序云开发:怎么删除云函数?已解决
查看>>
解决微信小程序项目导入的问题:app.json 未找到、 __wxConfig is not defined
查看>>
非迅捷|PDF、Word、PPT、Excel、图片等互相在线转换:免费、简单、快速、零错误、无套路
查看>>
第一次被黑
查看>>
PyCharm配置anaconda环境
查看>>
SpringBoot与缓存(JSR-107、Spring缓存抽象)
查看>>
ERROR 总结
查看>>
查找最小值栈的O(1)
查看>>
淘宝天猫双十一养猫组队怎么踢人
查看>>
Java面试题整理,闭关在家37天“吃透”这份345页PDF,纯干货
查看>>
概念唱片Plastic Beach封面高清壁纸
查看>>
旅游后期效果Ography Lightroom预设
查看>>
2017CS231n笔记5.CNN
查看>>
Linux系统安装Nodejs
查看>>