AMS在Android起到什么作用
AMS(ActivityManagerService)是Android系统中的一个关键组件,负责管理应用程序的生命周期、任务栈和应用程序之间的交互。AMS在Android中起到以下几个重要作用:一、Activity生命周期管理;二、任务栈管理;三、启动Activity;四、进程管理;五、权限管理。
![](https://cdn-kb.worktile.com/kb/wp-content/uploads/2023/06/2023061010124830.jpg)
一、Activity生命周期管理
AMS负责跟踪和管理应用程序中的Activity的生命周期。它会根据应用程序的状态和用户的交互,启动、暂停、停止和销毁Activity。通过Activity的生命周期管理,AMS确保应用程序在前台或后台运行时正确响应用户操作。
二、任务栈管理
AMS管理应用程序的任务栈,任务栈是一组相关Activity的集合,用于跟踪用户在应用程序之间的导航和切换。AMS负责创建、管理和销毁任务栈,并确保用户在任务栈中的Activity之间能够正确导航和返回。
三、启动Activity
当应用程序需要启动一个新的Activity时,AMS负责处理这个请求。它会检查Activity的启动模式、权限和任务栈等信息,并协调启动新的Activity。AMS还负责处理Activity之间的切换动画和过渡效果。
四、进程管理
AMS负责管理应用程序的进程。它监控应用程序的内存使用情况,并在系统资源紧张时根据优先级和策略终止一些进程,以保持系统的稳定性和响应性。AMS还负责处理进程间的通信和调度。
五、权限管理
AMS对应用程序的权限进行管理和控制。它会检查应用程序的权限声明,并在应用程序安装和运行时进行权限验证和授权。如果应用程序请求未经授权的权限,AMS会阻止其访问敏感资源。
总的来说,AMS在Android系统中起到了重要的角色,负责管理应用程序的生命周期、任务栈、进程和权限。它确保应用程序能够正确运行,并提供了用户友好的界面和导航体验。
延伸阅读
一、Android系统结构
1、系统内核
Android是运行于Linuxkernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNUGPL授权证所约束的部份,例如Android将驱动程序移到Userspace,使得Linuxdriver与Linuxkernel彻底分开。Bionic/Libc/Kernel/并非标准的Kernelheaderfiles。Android的Kernelheader是利用工具由LinuxKernelheader所产生的,这样做是为了保留常数、数据结构与宏。
Android的Linuxkernel控制包括安全(Security),存储器管理(MemoryManagement),程序管理(ProcessManagement),网络堆栈(NetworkStack),驱动程序模型(DriverModel)等。下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git工作的一个工具。
2、硬件抽像层
Android的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL的目的是为了把Androidframework与Linuxkernel隔开,让Android不至过度依赖Linuxkernel,以达成Kernelindependent的概念,也让Androidframework的开发能在不考量驱动程序实现的前提下进行发展。
HALstub是一种代理人(Proxy)的概念,Stub是以*.so档的形式存在。Stub向HAL“提供”操作函数(Operations),并由Androidruntime向HAL取得Stub的Operations,再Callback这些操作函数。HAL里包含了许多的Stub(代理人)。Runtime只要说明“类型”,即ModuleID,就可以取得操作函数。
3、中介软件
操作系统与应用程序的沟通桥梁,应用分为两层:函数层(Library)和虚拟机(VirtualMachine)。Bionic是Android改良libc的版本。Android同时包含了Webkit,所谓的Webkit就是AppleSafari浏览器背后的引擎。Surfaceflinger是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的BionicLibc。
Android采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemCompatibilityLibrary(OSCL)、Common、OpenMAX。
Android使用skia为核心图形引擎,搭配OpenGL/ES。skia与LinuxCairo功能相当,但相较于LinuxCairo,skia功能还只是雏形的。2005年Skia公司被Google收购,2007年初,SkiaGL源码被公开,Skia也是GoogleChrome的图形引擎。
Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过ContentResolver类(Column)取得共用数据库。
Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(DalvikVirtualMachine)。Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。
Dalvik虚拟机可以有多个实例(Instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。
4、安全权限机制
Android本身是一个权限分立的操作系统。在这类操作系统中,每个应用都以一个系统识别身份运行(Linux用户ID与群组ID)。系统的各部分也分别使用各自独立的识别方式。Linux就是这样将应用与应用,应用与系统隔离开。
系统更多的安全功能通过权限机制提供。权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问。
Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。
安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。