透视Android系统AMS、PMS和WMS,了解开发中的重要角色

原理

在Android系统中,AMS(Activity Manager Service)、PMS(PackageManager Service)和WMS(Window Manager Service)是三个重要的系统服务,它们负责管理应用程序的生命周期、处理应用程序的安装和卸载、以及管理应用程序的窗口视图。以下是这些服务的详细解释及其在Android开发中的作用:

AMS的原理:

AMS(Activity Manager Service)作为活动管理器服务,它主要负责管理和跟踪所有应用程序的活动任务和生命周期。当一个应用程序被打开时,AMS会启动该应用程序的进程,并给应用程序分配处理器资源和内存。当应用程序不再处于前台或后台,或者当系统内存不足时,AMS会终止或杀死这个应用程序的进程。

PMS的原理:

PMS(PackageManager Service)作为包管理器服务,主要负责在Android设备上安装、管理和卸载应用程序。当一个新的应用程序被安装时,PMS将识别应用程序的所有组件(如Activity、Service和Broadcast Receiver等),并为这些组件分配相应的权限。同时,PMS还监控已安装应用程序的状态,确保应用程序的完整性和安全性。

WMS的原理:

WMS(Window Manager Service)作为窗口管理器服务,它主要负责管理Android设备上的窗口视图,并控制应用程序的界面和正确的显示和输入。WMS负责管理应用程序窗口的位置、大小和布局,照顾多任务操作和应用程序之间的切换,从而确保用户界面稳定、流畅和一致。

AMS、PMS和WMS 之间的关系

  • 当用户开始一个新的应用程序,AMS启动该应用程序的进程并分配系统资源。
  • 一旦应用程序被启动,AMS将在WMS上安排应用程序窗口的位置和大小,从而形成用户与应用程序的交互界面。
  • PMS管理应用程序的组件信息和权限,确保应用程序能够正确地运行和访问设备资源。如果一个应用程序请求特殊的权限,PMS会检查设备的安全性并授权许可。
  • WMS管理并根据用户输入事件调整应用程序的窗口管理。当用户使应用程序不再前台或后台时,AMS将监控应用程序生命周期并调整其状态。

AMS、PMS和WMS三个系统服务一起工作,构成了Android运行环境中的关键组件和应用程序的核心支持,为应用程序的运行提供了全面和可靠的保障。

Android 应用程序开发中,AMS、PMS 和 WMS 三个服务相互协调工作,是应用程序能够高效稳定地运行的保证。Android 应用程序开发者需要了解这些服务在应用程序生命周期中的作用,以便更好地开发和优化应用程序,并提供更好的用户体验。

AMS、PMS、WMS简单使用示例

在Android应用程序中使用AMS、PMS和WMS的简单代码示例:

使用AMS启动应用程序进程:

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.myapp"); // 获取启动应用程序的意图
if (launchIntent != null) {
    startActivity(launchIntent); // 启动应用程序
} else {
    Log.e(TAG, "Unable to launch the app");
}

使用PMS请求权限:

private static final int PERMISSIONS_REQUEST_CODE = 123;
​
private void requestPermissionsIfNeeded() {
    int checkPermissionResult = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); // 检查是否已经获取摄像头权限
    if (checkPermissionResult != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CODE); // 请求摄像头权限
    } else {
        // 已经获得了摄像头权限
    }
}
​
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == PERMISSIONS_REQUEST_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户已经授权摄像头权限
        } else {
            // 用户拒绝授权摄像头权限
        }
    }
}

使用WMS管理应用程序窗口:

// 初始化WindowManager
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
​
// 设置LayoutParams参数
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, // 指定窗口需要显示在最上层
        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
        PixelFormat.TRANSLUCENT);
​
// 创建View并添加到WindowManager中
View myView = LayoutInflater.from(this).inflate(R.layout.my_view, null);
wm.addView(myView, params);

主要用途

  1. AMS 用于管理应用程序中所有的Activity和进程。它可以启动、暂停、停止和销毁Activity,以及管理应用程序的生命周期。AMS还可以为不同应用程序分配内存、进程和线程等系统资源。
  2. PMS 用于管理所有已安装的应用程序的信息,包括应用程序的包名、版本号、权限等。应用程序可以通过PMS获得其他应用程序的信息,例如检查其他应用程序是否已安装或请求某些权限。
  3. WMS 用于管理Android设备上所有的窗口,包括应用程序窗口、系统窗口和导航栏等。WMS负责向屏幕上显示哪些窗口,并处理用户输入和触摸事件。

源码简要

AMS、PMS和WMS属于Android系统的核心服务,其源码可以在Android开源项目(AOSP)中找到。以下是简要的源码分析:

AMS

AMS的源码在/frameworks/base/services/core/java/com/android/server/am/路径下。AMS主要由ActivityManagerService.java、ActivityStack.java、ProcessRecord.java等核心类组成。

ActivityManagerService类是AMS的主要实现类,负责管理应用程序的Activity和进程,并控制所有正在运行的应用程序的状态和行为。ActivityStack类则负责跟踪应用程序中所有的Activity,并处理它们的状态和生命周期。ProcessRecord类用于表示系统中正在运行的应用程序进程的信息。

PMS

PMS的源在/frameworks/base/services/core/java/com/android/server/pm/路径下。PMS主要由PackageManagerService.java、PackageParser.java、PackageInfo.java等核心类组成。

PackageManagerService类是PMS的主要实现类,负责管理应用程序的包信息、安装和卸载应用程序、更新应用程序等。PackageParser类用于解析应用程序的AndroidManifest.xml文件,提取应用程序的包名、权限等信息。而PackageInfo类则用于表示应用程序的包信息。

WMS

WMS的源在/frameworks/base/services/core/java/com/android/server/wm/路径下。WMS主要由WindowManagerService.java、WindowManagerGlobal.java、WindowState.java等核心类组成。

WindowManagerService类是WMS的主要实现类,负责将应用程序的窗口绘制在屏幕上,并处理用户输入和触摸事件。WindowManagerGlobal类为应用程序提供了与WMS进行交互的API。而WindowState类用于表示应用程序中的窗口信息。

AMS、PMS和WMS的简要源码分析,它们的源码非常复杂,需要深入研究才能充分掌握其内部实现和运行机制。

全文主要讲解了AMS、PMS和WMS三个核心服务,在Android开发中Framework技术中占重要成分,主要也是大范围的概括想要更加深入的学会这些,必须还要更加系统的学习。这里推荐参考《Framework全家桶》这个文档包含了Framework的所有技术点以及源码的解析,需要可以点击查看详细类目获取!

总结

AMS、PMS和WMS三个核心服务在Android系统中的作用和源码分析。AMS负责管理应用程序的Activity和进程,控制应用程序的状态和行为。PMS管理应用程序的包信息,负责应用程序的安装、卸载和更新。WMS则负责将应用程序的窗口绘制在屏幕上,并处理用户输入和触摸事件。

三个核心服务的源码都可以在Android开源项目中找到,其中AMS、PMS和WMS的关键类分别为ActivityManagerService、PackageManagerService和WindowManagerService。这些类的实现非常复杂,需要深入了解才能全面掌握其内部实现和运行机制。

猜你喜欢

转载自blog.csdn.net/m0_62167422/article/details/130093631