腾讯、网易云、字节跳动面试点总结—AMS在Android起到什么作用?

本文详述AMS(ActivityManagerService)在Android系统中的重要角色,包括组件启动、进程管理、内存调度等方面,深入剖析startActivity流程、广播处理、服务启动及App Crash处理,帮助理解AMS的复杂机制。
摘要由CSDN通过智能技术生成

本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注

面试官: AMS在Android起到什么作用,简单的分析下Android的源码

心理分析:这道题在发生在大多数场景下。面对这道题 很多求职很茫然,不知道该如何说起。AMS本身比较复杂难以理解。工作多年也很难弄清AMS的作用,其实我们大可从以下几点入手组件启动、进程切换、Crash异常入手

**求职者:**AMS难以表述 我们就从最熟知 的Activity启动入手,逐步深入和分析,用定力告诉面试官,我层深入研究过。接下来我们从五条线分析AMS作用及机制

概述
相信大多数动脑同学对文章中提到的ActivityManagerService(以后简称AMS)都有所耳闻。

AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要。 AMS是碰到的第一块难啃的骨头[①],涉及的知识点较多。为了帮助读者更好地理解AMS,接下来将带小伙伴么按五条不同的线来分析它。

  • 第一条线:同其他服务一样,将分析SystemServer中AMS的调用轨迹。
  • 第二条线:以am命令启动一个Activity为例,分析应用进程的创建、Activity的启动,以及它们和AMS之间的交互等知识。
  • 第三条线和第四条线:分别以Broadcast和Service为例,分析AMS中Broadcast和Service的相关处理流程。
  • 第五条线:以一个Crash的应用进程为出发点,分析AMS如何打理该应用进程的身后事。 除了这五条线外,还将统一分析在这五条线中频繁出现的与AMS中应用进程的调度、内存管理等相关的知识。 提示ContentProvider将放到下一章分析,不过本章将涉及和ContentProvider有关的知识点。 先来看AMS的家族图谱:

由图可知:

  • AMS由ActivityManagerNative(以后简称AMN)类派生,并实现Watchdog.Monitor和BatteryStatsImpl.BatteryCallback接口。而AMN由Binder派生,实现了IActivityManager接口。
  • 客户端使用ActivityManager类。由于AMS是系统核心服务,很多API不能开放供客户端使用,所以设计者没有让ActivityManager直接加入AMS家族。在ActivityManager类内部通过调用AMN的getDefault函数得到一个ActivityManagerProxy对象,通过它可与AMS通信。

AMS由SystemServer的ServerThread线程创建;

1. 初识ActivityManagerService总结

本节所分析的4个关键函数均较复杂,与之相关的知识点总结如下:

  • AMS的main函数:创建AMS实例,其中最重要的工作是创建Android运行环境,得到一个ActivityThread和一个Context对象。
  • AMS的setSystemProcess函数:该函数注册AMS和meminfo等服务到ServiceManager中。另外,它为SystemServer创建了一个ProcessRecord对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值