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

2023-10-30

面试官: 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中。另外&#

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试---AMS在Android起到什么作用,简单的分析下Android的源码 的相关文章

  • 致命异常:Google 地图 V2 中的 GLThread、StackOverflowError

    我正在实施 Google 地图 V2 并利用从外部 GPX 文件接收的交付路线 设备路径 设备当前位置和交付点位置 问题是它大多数时候都有效 我收到的错误 当它不起作用时 是下一个 03 16 20 48 37 811 I dalvikvm
  • Android - 手机锁定时执行操作

    我想知道如何在手机锁定时执行某些操作 或继续侦听传感器或电池更换事件 当手机锁定时 它会停止监听传感器的变化 我尝试过使用唤醒锁 但它不起作用 也许我使用错误 任何帮助 将不胜感激 我建议为此使用服务 即使手机被锁定 它们也会在后台运行 这
  • 是否仍然建议使用 AsyncTask 在后台加载 listView 项目?

    背景 我听说有一些在后台加载数据的新解决方案比 AsyncTask 更值得推荐 例如loaders http developer android com reference android content Loader html 问题 As
  • Android 测试 java.lang.NoClassDefFoundError 由于 Fest-Android 出现错误

    我目前正在我的项目中实现 Android 版 Fest 但我似乎遇到了依赖问题 如果我在不包含 Fest 库的情况下运行测试 测试将正常运行 一旦我添加了 Fest 库 测试就不再运行 相反 会抛出异常 我的项目使用以下依赖项 compil
  • 意图过滤器到底是什么?

    我读过很多关于意图过滤器的文章 但我真的无法理解它们到底是做什么的 那么 如果有人可以用一个清晰 的例子向我解释意图过滤器的作用到底是什么 thanks 我认为这是有据可查的here http developer android com g
  • Android:NotificationCompat.MediaStyle 操作按钮不执行任何操作

    我有一个简单的 Android 应用程序 其中包含一个Activity and a Service源自于MediaBrowserServiceCompat 我已成功将其设置为通过使用播放我的主要活动中的音频MediaBrowserCompa
  • Android物理引擎[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在研究了 3D 游戏编程之后 很快就明白了为什么物理引擎非常有用 Android 支持哪些物理引擎并且可以在 Android 上使用 关于
  • 按钮上方带有文本的单选按钮

    我是 Android 新手 我需要在我的活动中添加单选按钮 但我需要将文本放在项目符号按钮的顶部 请提供任何帮助 我发现了以下内容 尽管我不明白 drawable in 选择器和 style Tab 样式是什么 顶部带有文本的单选按钮 ht
  • 带有内容提供商的小部件;无法使用ReadPermission?

    所以我刚刚为我的应用程序实现了一个小部件 它通过我的数据库从数据库获取数据ContentProvider 我在清单中定义了自己的读 写权限 声明我使用它们 似乎没有什么区别 并在内容提供程序中要求它们
  • 如何将您的终端与 Android 模拟器连接

    我尝试导航到 android 工具文件夹并输入 adb shell 命令 但它似乎不起作用 我的终端似乎只能识别命令的 adb 部分 并给我一条错误消息 我究竟做错了什么 通过键入列出所有连接的设备adb devices 检查是否列出了任何
  • 在一个react-native项目中使用谷歌地图和FCM

    I want to use google map and FCM in one react native project first I added FCM in project everything was okay but when I
  • 错误:类 kotlin.reflect.jvm.internal.FunctionCaller$FieldSetter

    我已尝试一切方法来消除此错误 但它不断出现 Class kotlin reflect jvm internal FunctionCaller FieldSetter can not access a member of class com
  • 为什么 Android 上的免安装应用有两种设置?

    我使用的是运行 Android 11 的 Pixel 3 我发现有 2 种不同的设置可以控制免安装应用的某些方面 设置 应用程序和通知 默认应用程序 打开链接 即时应用程序 即使未安装 也打开应用程序中的链接 切换默认为开 Google P
  • 可下载字体例外

    我决定使用可下载字体 https developer android com guide topics ui look and feel downloadable fonts html在我的项目中 IS 按照指南中的建议实施了所有内容 当我
  • 特定铃声 firebase 通知 xamarin.android

    How i can force the push notification to run ringtone instead of default notification sound is there any way to ovveride
  • Android 报告“Error=Unable to find Instrumentation info for: ComponentInfo {}”

    stackoverflow 上有很多关于这个问题的主题 问题 例如错误 无法找到以下仪器信息 ComponentInfo https stackoverflow com q 21294945 513413 和其他网站 但使我的问题与其他网站
  • 使用磁场计算旋转矩阵

    在获取旋转矩阵值时它包含public static boolean getRotationMatrix float R float I float gravity float geomagnetic 这里我如何计算float gravity
  • 如何在jetpack compose中删除文本基线下方的空间?

    目前我得到这个 但我想要这样的东西 而且 50 和 min 中的文本也应该与顶部对齐 My code Row verticalAlignment Alignment Bottom Text text 18 color MaterialThe
  • 如何在 Android 应用程序退出之前进行一些清理?

    当我的 Android 应用程序终止时 是否有某种 onTerminate 方法可以进行一些清理 我想清除一些 SharedPreferences 我有一个活动 它保持几个数字的运行平均值 并将其存储在 SharedPreference 中
  • Android 中用于过渡的自定义动画对象?

    我想用一些更奇特的东西来覆盖 Android 中的默认活动转换 我想做的事情不能用通常使用的 XML 集来完成 所以我不能使用overridePendingTransition因为它只接受对基于 XML 的动画资源的整数引用 我想做的是创建

随机推荐

  • python处理xml文件

    1 python 操作xml的方式介绍 查看全部包含 三种 法 是xml dom 模块 它是W3CDOMAPI的实现 若需要处理DOMAPI则该模块很适合 是xml sax 模块 它是SAXAPI的实现 这个模块牺牲了便捷性来换取速度和内存
  • matlab中varargout简介

    varargout可以看做 Variable length output argument list 的缩写 在matlab中定义m函数时通过 varargout我们可以得到可变个数个返回值 在matlab命令窗口中输入doc vararg
  • 【H5】Cookie、Session、Token、JWT区别及使用方法

    Token 和 Session 的区别 Session 是一种记录服务器和客户端会话状态的机制 使服务端有状态化 可以记录会话信息 而 Token 是令牌 访问资源接口 API 时所需要的资源凭证 Token 使服务端无状态化 不会存储会话
  • Spring Boot 集成 Flowable 并自定义数据源

    永久链接 https blog kekwy com flowable datasource 问题描述 在使用 flowable spring boot starter 进行 spring boot 集成 flowable 时 flowabl
  • Python爬虫——urllib_post请求百度翻译

    post请求 post的请求参数 是不会拼接在url后面的 而是需要放在请求对象定制的参数中 post请求的参数需要进行两次编码 第一次urlencode 对字典参数进行Unicode编码转成字符串 第二次encode 将字符串数据转换为字
  • 插值法

    插值 根据已知数据点 条件 预测未知数据点的值的方法 1 多项式插值法 多项式插值法 多项式插值法 所求的插值函数是多项式 其中 就是所要求的参数 多项式插值基本公式 求系数 1 1 拉格朗日插值法 设函数 y f x 在区间 a b 上有
  • 希尔排序(重点讲解如何分组)---------通俗易懂,直击重点!!!

    文章目录 希尔排序的历史 一 关于希尔排序 二 希尔排序的思路 三 代码实例讲解 总结 希尔排序的历史 希尔排序按其设计者希尔 Donald Shell 的名字命名 该算法由希尔 1959 年公布 1 希尔排序是基于插入排序的以下两点性质而
  • 杜教筛BM(找规律)

    代码来自学长 include
  • Centos--解决Pycharm无法输入中文问题

    在 pytcharm bin pytharm sh 中添加如下代码 export GTK IM MODULE ibus export QT IM MODULE ibus export XMODIFIERS im ibus Run the I
  • vue动态调节背景图片

    vue动态调节背景图片 在一些场景下我们需要使用户可以进行自定义背景图片 包括背景图片和其透明度 当然 还有许多也可以 这里就以这两个为例子 都差不多 这里我就为大家详细介绍如何动态设置背景图片 伪类绑定样式属性值 其中声音播放部分详情在
  • java语言实现多态的方式_什么是多态机制?Java语言是如何实现多态的?【详细解释】...

    今天爱分享给大家带来什么是多态机制 Java语言是如何实现多态的 详细解释 希望能够帮助到大家 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定 而是在程序运行期间才确定 即一个引用变量倒底会
  • 11【Sass语法介绍-导入】

    1 前言 在 CSS 中我们可以通过 import 来导入一个样式文件 Sass 扩展了 CSS 的 import 规则 使得可以导入 CSS 后缀的样式文件和 Scss 后缀的样式文件 并且提供了对 mixin 函数和变量的访问 与 CS
  • CCF CSP 中国计算机学会-CCF计算机软件能力认证(计算机水平测试)-简介-详情

    CCF gt gt 简介 中国计算机学会 英文名为China Computer Federation 简称CCF 是由从事计算机及相关科学技术领域的科研 教育 开发 生产 管理 应用和服务的个人及单位自愿结成 依法登记成立的全国性 学术性
  • Spring Aop 错误之:No MethodInvocation found ... the ExposeInvocationInterceptor is upfront in the inter...

    分析这个问题需要先了解一个东西 ExposeInvocationInterceptor 1 从官方得到以下相关信息 可以获知 当使用 AspectJ 时 spring 会添加一个连接器放到 advice 链的开头 但是为何要放这个东西呢 它
  • nmake使用以及windows上makefile编写

    VC6 0其实已经不再使用makefile文件进行编译了 但是它仍然可以导出makefile文件 后缀名为 mak 方法是在工程菜单下的导出makefile文件 你也可以将 mak文件更名为makefile这样就可以只使用nmake进行编译
  • python练习题-jmu_python_是否是数

    本题要求从键盘输入一个字符串 判断该串是否属于整数 浮点数或者复数的表示 输入格式 输入一个字符串 输出格式 输出yes或no 输入样例 299 输出样例 yes 几个语句判断input输入的类型的行了 当然这里还要有一个异常处理 eval
  • 测试点击屏幕次数的软件_闪电点击app下载-闪电自动点击 安卓版v1.3.2

    闪电自动点击app是一款帮助用户自动完成点击任务的应用 闪电自动点击器软件上一键设置即可自动帮你玩游戏 连续完成点击得奖励 闪电点击app内置脚本运行非常稳定 软件介绍 闪电自动点击 快点神器 是一款记录手势和点击操作轨迹的软件 闪电自动点
  • mongodb 批量更新和替换

    批量更新字段值 更新lv2id 值是mssql的所有记录 将lv2id改为 SQLServer 将lv2name改为 SQLServer db getCollection db menu tree update lv2id mssql se
  • 微信小程序六位密码框的实现

    首先来看一下效果 wxml
  • 面试---AMS在Android起到什么作用,简单的分析下Android的源码

    面试官 AMS在Android起到什么作用 简单的分析下Android的源码 心理分析 这道题在发生在大多数场景下 面对这道题 很多求职很茫然 不知道该如何说起 AMS本身比较复杂难以理解 工作多年也很难弄清AMS的作用 其实我们大可从以下