APP启动流程分析(上)

ActivityManagerService的启动流程介绍总体流程涉及的数据结构ProcessRecord(进程)ActivityRecordTaskRecordActivityStackActivityStackSupervisor详细的流程介绍这篇文章是讲,从手机桌面(Launcher)点击一个未启动app的图标到这个app启动完成的流程(冷启动)。总体流程Launcher、AMS、Zygote、app都处于不同的进程,他们之间需要跨进程才能通信。用户点击Launcher的app图标后,La
摘要由CSDN通过智能技术生成

前言

本文基于Android 9.0(Android P),API 28。
本文是APP启动流程分析的上篇,对总体流程进行分析。
如果已经了解总体流程,请看源码流程分析 APP启动流程分析(下)

总流程

startActivity流程
Launcher、AMS、Zygote、app都处于不同的进程,他们之间需要跨进程才能通信。

用户点击Launcher的app图标后,Launcher通知AMS,如果目标app未启动(冷启动),AMS会通过Socket来通知Zygote去创建进程,Zygote就fork出我们要启动的app进程。
紧接着app要打开HomeActivity,需要与AMS交互

  1. app -> AMS : 因为AMS启动时,就注册到ServiceManager了,所以app调用getService就能从ServiceManager获取到AMS的代理类IActivityManager(客户端)。app从而通过IActivityManager调用AMS(服务端)的方法。
  2. AMS -> app : AMS准备一个IBinder,叫IApplicationThread(服务端)。当app进程启动完成后,会调用IApplicationThread的attachApplication方法,把app的代理类ApplicationThread(客户端)作为参数传给AMS。AMS可以调用ApplicationThread的方法从而控制app。

IApplicationThread的实现类是ActivityThread的内部类ApplicationThread

看完流程图,我们再来看时序图
在这里插入图片描述
图中的4就是attachApplication的过程,把app的代理类ApplicationThread交给AMS。
图中的5就是AMS做完一些处理后&#

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值