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 启动流程

首先我们看看系统启动流程:
Android进阶——AMS浅析(1)_第1张图片

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

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

  • 当Zygote起来以后,首先会启动大儿子进程:SystemServer进程的入口在这儿:SystemServer().run();
    Android进阶——AMS浅析(1)_第5张图片
  • SystemServer.main -> new SystemServer().run(),我们来看看这个run 方法:设置校准时间,设置一些属性,初始化虚拟机


    Android进阶——AMS浅析(1)_第6张图片
    android.R.xxx.xxx之类的一些资源
    Android进阶——AMS浅析(1)_第7张图片
    用这三个函数加载各种系统服务,我们的AMS就是在startBootstrapServices(加载核心服务)中加载的,加载后就startCoreServices启动核心服务,然后startOtherServices启动其他服务,最后Looper.loop进入循环
  • 在startBootstrapServices中:通过SystemServiceManager.startservice,在通过反射创建的LifeCycle中真正创建了AMS服务
    Android进阶——AMS浅析(1)_第8张图片
  • 我们来看看ActivityManagerService服务中干了什么:负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,这里面大概有3W行代码,下面简单例举一些
    Android进阶——AMS浅析(1)_第9张图片



Android进阶——AMS浅析(1)_第10张图片
未完待续:

你可能感兴趣的:(Android)