问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android Framework 面试题系列之AMS

发布网友 发布时间:2024-09-17 03:20

我来回答

1个回答

热心网友 时间:2024-10-21 09:49

在Android面试中,经常会出现关于ActivityManagerService(AMS)的问题。AMS是负责管理Activity的类,由此衍生出许多问题。以下是对这些问题的总结:

1. 简述ActivityManagerService的作用及初始化时机。

ActivityManagerService主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作。它的职责与操作系统中的进程管理和调度模块类似。AMS在SystemServer进程开启时进行初始化,相关启动代码可在SystemServer类中找到。

2. 简述ActivityThread和ApplicationThread,以及它们的关系和区别。

ActivityThread在Android中代表主线程,但不是一个Thread类。它是Android进程的初始类,main函数是该App进程的入口。ApplicationThread是ActivityThread的内部类,是一个Binder对象。它作为IApplicationThread对象的server端等待client端的请求,最大的client就是AMS。Activity启动逻辑过程中,ApplicationThread的ScheleActivity通过一个叫H的Handler发送启动Activity信息,handleLaunchActivity接收消息并处理,最终执行Activity的启动。

3. 介绍Instrumentation及其与ActivityThread的关系。

Instrumentation是Android系统中一系列控制方法的集合(hook),可以在正常生命周期之外控制Android控件的运行,也可以控制Android如何加载应用程序。AMS与ActivityThread之间的交互工作,如Activity的创建、暂停等,都是由Instrumentation操作的。每个Activity都持有一个Instrumentation对象的一个引用,整个进程中只有一个Instrumentation。当startActivityForResult()调用之后,实际上还是调用了mInstrumentation.execStartActivity()。

4. 介绍ActivityManagerService和zygote进程通信的实现方式。

应用启动时,Launcher进程请求AMS,AMS发送创建应用进程请求,Zygote进程接受请求并fork应用进程。Zygote处理客户端请求后,调用ZygoteConnection.processOneCommand()处理参数,并fork进程。最后通过findStaticMain()找到ActivityThread类的main()方法并执行,子进程就这样启动了。

5. 介绍ActivityRecord、TaskRecord和ActivityStack。

ActivityRecord是应用层Activity组件在AMS中的代表,每个在应用中启动的Activity,在AMS中都有一个ActivityRecord实例与之对应。TaskRecord即任务栈,每个TaskRecord可能存在一个或多个ActivityRecord,栈顶的ActivityRecord表示当前可见的界面。ActivityStack用于管理TaskRecord,内部维护了一个ArrayList。ActivityStackSupervisor内部有两个不同的ActivityStack对象:mHomeStack、mFocusedStack,用于管理不同的任务。

6. 介绍ActivityManager、ActivityManagerService和ActivityManagerNative的关系。

ActivityManager是对Activity管理、运行时功能管理和运行时数据结构的封装。ActivityManagerService是与系统所有正在运行着的Activity进行交互,对系统所有运行中的Activity相关信息进行管理和维护。ActivityManagerNative是一个抽象类,真正发挥作用的是它的子类ActivityManagerService。ActivityManager持有的是这个ActivityManagerProxy代理对象,这样只需要操作这个代理对象就能操作其业务实现的方法。不过,ActivityManagerNative在API 26已经过时了,现在对Activity的管理都使用的是ActivityManager。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孩子依赖性太强,妈妈怎么办?目录 孩子对妈妈依赖性太强怎么办 介绍权利的游戏里龙之母全名是什么? 澳洲血橙胶原蛋白是玻璃瓶的吗? 梦见母亲侄子妹妹舅妈电话破屋的预兆 梦见坐别人的车什么意思 有多少人去拜过“龙母”,又有几人知道“龙母”是真的存在过 龙母庙地址在哪里? 龙母像地址在哪里? 龙姥姥是龙母娘娘吗 Android UI相关面试题:自定义view与viewgroup的区别 Android组件内核面试题:Activity的4大启动模式,与开发中需要注意的问... Android常见面试题:谈谈你对Http与Https的关系理解 Android面试官问你这些问题你能答得上来吗 雪纳瑞得了犬瘟热有什么症状呢? 2024最新Android大厂面试题合集(附答案及资料整合包) 犬瘟热症状和治疗方法有哪些 把手机放在裤子包包里面拿手机的时候不小心用手打到手机充电哪里会坏吗... 把手机放在衣服包包里面拿手机到时候,不小心手打到手机充电的地方会坏... 一个手拿手机,用另一只手去点手机上面,导致手机被按下去了,会坏吗? 送丈人什么生日礼物比较好 老丈人过生日,送什么礼物? 边牧从来不叫一声正常吗 是不是有缺陷 狗狗不叫正常吗 女生说dr是什么意思 福建省城乡居民基础养老金标准? 收获及体会的优秀句子 跑步上山我跑最后一名丢人怎么样可以跑快 ...我想知道,我还需要做什么练习,才能轻松地爬上山? ...但平常没有练习时间。怎样才能使我在十天时间内增加跑步... Android UI相关面试题:如何更新UI,为什么子线程不能更新UI? 正式文件格式书写标准是什么 常用的文本格式有 火山的女儿赠礼邀约攻略大全 天涯明月刀手游伙伴能在副本中用吗 出战场景介绍 火山的女儿如何攻略公主 DR的衣服有格调吗? 狗能和人配吗? 狗能和人杂交吗? 人可不可以和狗生孩子 人能不能跟狗杂交 人能跟狗生小孩么? 人能生狗吗 人不能生狗 为什么人不能和狗自然繁殖后代?! 安之源净水器 武林外传1-70花RMB找人带需要多少钱 武林外传戟神战场+14或者15多少钱? 江西高安特产有哪些 炸肺是什么意思? 炒币什么意思