Android进阶——AMS浅析(1)

1. 简介

AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要。

Activity与WIndow:

  • Activity只负责生命周期和事件处理
  • Window只控制视图
  • 一个Activity包含一个Window,如果Activity没有Window,那就相当于Service

AMS与WMS:

  • AMS统一调度所有应用程序的Activity
  • WMS控制所有Window的显示与隐藏以及要显示的位置

让我们我们从问题来学习AMS:

  • (1)AMS是如何启动的?
  • (2)startActivity的启动流程?
    app,ams如何通信的?——binder
    ams如何控制activity的生命周期
    如何去启动一个没有在AndroidManifest注册的组件

2. AMS 启动流程

首先我们看看系统启动流程:
在这里插入图片描述

  • Boot ROM: 加载一个引导程序Boot Loader
  • Kernel: Android基于Linux,所以首先启动Linux内核,为系统做一些准备工作:缓存,加载驱动之类的,
  • init进程: 然后就会启动init进程,从系统里面寻找并解析init.rc文件(system-core-init),init进程是用户态的第一个进程,开始启动系统,init中有一个main函数入口,其中会解析一个很重要的脚本文件Zygote.
    在这里插入图片描述
  • Zygote: 孵化器,用于孵化APP进程,APP进程都是由Zygote通过fork机制孵化出来的。
    最开始Zygote孵化出SystemServer,Zygote的入口是app_main.cpp。
    在这里插入图片描述
  • SystemServer: 启动各种服务:包括AMS,WMS,之类:Zygote的入口是app_main.cpp,它首先回去准备AndroidRuntime运行时环境,然后会启动虚拟机,然后会注册一个Socket监听registerZygoleSocket()用于接受AMS这边创建进程的请求,然后运行一些preload()加载一些class文件
    在这里插入图片描述

接下来从源码的角度看看AMS的启动流程:

  • 当Zygote起来以后,首先会启动大儿子进程:SystemServer进程的入口在这儿:SystemServer().run();
    在这里插入图片描述
  • SystemServer.main -> new SystemServer().run(),我们来看看这个run 方法:设置校准时间,设置一些属性,初始化虚拟机
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    android.R.xxx.xxx之类的一些资源
    在这里插入图片描述
    用这三个函数加载各种系统服务,我们的AMS就是在startBootstrapServices(加载核心服务)中加载的,加载后就startCoreServices启动核心服务,然后startOtherServices启动其他服务,最后Looper.loop进入循环
  • 在startBootstrapServices中:通过SystemServiceManager.startservice,在通过反射创建的LifeCycle中真正创建了AMS服务
    在这里插入图片描述
  • 我们来看看ActivityManagerService服务中干了什么:负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,这里面大概有3W行代码,下面简单例举一些
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
未完待续:

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yawn__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值