Android进阶——AMS浅析(1)

Android进阶——AMS浅析(1)1 简介 AMS 是 Android 中最核心的服务 主要负责系统中四大组件的启动 切换 调度及应用进程的管理和调度等工作 其职责与操作系统中的进程管理和调度模块相类似 因此它在 Android 中非常重要 Activity 与 WIndow Activity 只负责生命周期和事件处理 Window 只控制视图

大家好,我是讯享网,很高兴认识大家。

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行代码,下面简单例举一些
    在这里插入图片描述

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

小讯
上一篇 2025-03-08 09:09
下一篇 2025-03-23 23:12

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/67704.html