Android面试题之ActivityManagerService的启动流程

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文探讨了Android系统的SystemServer启动过程,包括创建SystemContext、引导服务、启动各类核心服务以及AMS的启动和初始化。AMS负责管理activity、广播队列、provider等,并设置SystemProcess,安装系统Provider。当AMS调用SystemReady时,系统UI准备启动,启动Launcher。文中还对比了init、zygote和system_server进程的角色。最后推荐了两本关于Android内核剖析的书籍:柯元旦教授的《Android内核剖析》和罗升阳的《Android系统源代码情景分析》。关注公众号AntDream获取更多内容。

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

SystemServer启动

  1. 创建SystemContex 用于加载系统相关的资源,比如theme,android命名空间下的资源等
  2. 创建引导服务,安装器Installer服务, AMS就属于引导服务,还有电源管理服务PMS
  3. 启动核心服务和其他服务,总共得有80多个以上
  4. AMS启动也分为几个阶段,类似生命周期

AMS启动和初始化

  1. SystemServer通过startService创建Lifecycle对象,
  2. Lifecycle里构造方法里通过new创建AMS
  3. AMS 会创建“android.ui”线程、创建ActiveServices管理activity、创建ActivityStackSupervisor对象管理activity栈
  4. AMS会创建前台广播和后台广播队列、provider的Map等
  5. 电量统计服务、进程相关服务
  6. VrConroller虚拟现实相关
  7. mActivityConroller
  8. RecentTask,最近的任务列表
  9. ClientLifeCycleManager API28之前是没有,用来控制activity的生命周期
  10. watchDog守护进程(继承自Thread是一个线程)
  11. 移除所有的应用进程(AMS刚刚启动),启动电池服务
12.setSystemProcess

mActivityManagerService.setSystemProcess 设置SystemServer,添加了各种服务:

  • permission权限服务、内存服务meminfo、进程统计服务procstats、进程服务processinfo、数据库服务等
  • oomAdj服务,跟杀进程有关
13.安装系统相关的Provider
  • 安装Provider
  • 系统设置相关的监听,字体相关的监听,开发者选项相关监听
  1. 调用WMS的main方法创建和初始化WMS,然后AMS设置WMS,将AMS与WMS关联起来
  2. 和网络相关的服务关联起来
16. AMS调用SystemReady,服务基本启动完成,准备启动系统UI
  • startSystemUi启动系统UI
  • 执行一些列服务的SystemReady方法
  • startHomeActivityLocked方法,启动Launcher

进程对比

  • init进程:没有framework的资源,主要任务是解析init.rc文件,创建各种服务进程
  • zygote进程:会加载一个进程所需要的必要资源,比如preloadClass、VM虚拟机;APP的进程从这里fork出
  • system_server进程:从zygote进程fork出来,创建大量服务,比如AMS等,加载androidFramework所需要的资源,创建context;也有可能会创建其他的进程,有些服务可能是处于单独的进程

参考书

这里介绍几本系统层面的参考书,都是比较有名的
1、柯元旦教授的《Android内核剖析》

《Android内核剖析》是柯元旦教授编著的一本深入解析Android操作系统内核的专著。柯元旦教授是中国计算机领域的知名专家,他在操作系统和内核层面有着丰富的研究和实践经验。这本书针对Android系统,从底层内核到高层应用,提供了全面而深入的解析。

2、罗升阳 的《Android系统源代码情景分析》

《Android系统源代码情景分析》是罗升阳编著的一本详尽解析Android系统源代码的书籍。罗升阳是一位深耕Android系统的专家,他在操作系统和Android平台方面有深厚的技术积累和丰富的从业经验。这本书通过剖析实际的源代码,帮助读者理解Android系统的框架和实现机制。


欢迎关注我的公众号AntDream查看更多精彩文章!

目录
相关文章
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
87 6
|
2月前
|
Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
2月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
28 3
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
18 0
|
11天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
16天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
2天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
18天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。