返回

AMS、WMS、APP三者协同交互逐层深入了解

Android

前言

Android系统是一个基于Linux内核的移动操作系统,它的设计目标是让开发者能够在各种各样的移动设备上编写和运行应用程序。为了实现这一目标,Android系统提供了一系列的底层服务和框架,AMS(Activity Manager Service)和WMS(Window Manager Service)就是其中两个最重要的服务。

AMS负责管理系统中的所有应用程序,包括应用程序的启动、停止、生命周期管理等。WMS负责管理系统中的所有窗口,包括窗口的创建、显示、隐藏、位置和大小的调整等。App与AMS、WMS之间通过Binder进行通信和交互,以实现应用程序的启动、停止、界面的显示和切换等功能。

AMS、WMS与App之间的交互过程

应用程序启动过程

当用户点击应用程序图标时,系统会启动AMS,AMS首先会检查应用程序是否已经安装,如果已安装,则直接启动应用程序;如果未安装,则会提示用户安装应用程序。

应用程序安装完成后,AMS会创建一个新的进程来运行应用程序,这个进程称为应用程序的主进程。主进程会创建一个ActivityManager对象,并通过Binder机制与AMS通信。

ActivityManager对象会调用AMS的startActivity()方法,AMS会根据应用程序的包名和类名,找到应用程序的主Activity,并启动主Activity。

App内部页面切换过程

应用程序在运行过程中,可以通过调用startActivity()方法来启动新的Activity,也可以通过调用finish()方法来结束当前Activity。

当应用程序启动新的Activity时,AMS会创建一个新的进程来运行该Activity,这个进程称为Activity的进程。Activity的进程会创建一个ActivityManager对象,并通过Binder机制与AMS通信。

ActivityManager对象会调用AMS的startActivity()方法,AMS会根据Activity的包名和类名,找到Activity的进程,并启动Activity。

当应用程序结束当前Activity时,AMS会销毁Activity的进程,并回收Activity的资源。

窗口的创建和显示过程

应用程序可以通过调用setContentView()方法来设置Activity的布局,布局中可以包含各种各样的控件,如Button、TextView、ImageView等。

当应用程序调用setContentView()方法时,Activity会创建一个View对象来表示布局,View对象会调用WMS的addView()方法来将自己添加到窗口中。

WMS会根据View对象的属性,创建相应的窗口,并将其显示在屏幕上。

图形界面的渲染过程

当应用程序显示图形界面时,WMS会将窗口的内容发送给SurfaceFlinger。

SurfaceFlinger是一个图形加速器,它负责将窗口的内容渲染到屏幕上。

SurfaceFlinger使用Open GL ES进行图形渲染,Open GL ES是一个跨平台的图形渲染API。

总结

AMS、WMS以及App之间的交互是Android系统底层核心机制之一,也是Android App开发人员所必须了解和掌握的基础知识。本文从整体架构入手,逐层深入分析了AMS、WMS以及App之间的交互过程,包括四大组件的启动,App之间及内部页面之间的切换,窗口的创建和显示,以及图形界面的渲染等。同时还介绍了到Binder机制、消息机制、SurfaceFlinger等相关的技术知识。