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

news2024/11/27 1:35:08

原理

在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。这些类的实现非常复杂,需要深入了解才能全面掌握其内部实现和运行机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Backblaze + Cloudflare + Picgo 打造免费顺畅的图床体验

本文xlog地址:https://x.cosine.ren/backblaze-cloudflare-picgo-imgbed hexo 地址:https://ysx.cosine.ren/backblaze-cloudflare-picgo-imgbed 同步发布 最近有用到oss存储的需求,跟群友调研了下国内 & 国外的 oss 后,深感找…

大爽pygame入门教程 第一节 基础知识

作者自我介绍:大爽歌, b站小UP主 ,编程1对1辅导老师 本节掌握要点: 文本, 图形, 键鼠事件,动态展示。 一、实现基础窗口 0 - 新建文件 新建001.py文件,内容如下 import pygamepygame.init() # pygame 初始化&#x…

什么是远程桌面连接?如何操作远程桌面?

随着时代越来越信息化、智能化、自动化,越来越多的企业和个人开始使用远程办公软件进行办公。其中远程桌面连接是一种非常流行的办公方式。那么,什么是远程桌面连接?如何操作远程桌面? 一、什么是远程桌面连接? 远程桌面连接是一种远程访问计算机的…

nginx缓冲区关闭导致下载失败问题-方案篇

问题描述 导出操作。小于200k的excel正常下载,大于200K的下载失败,异常信息如下: Cannot forward to error page for request [/xx/xx] as the response has already been committed. As a result,the response may have the wrong status code. If you…

程序员工作久了,都不会好好说人话了...互联网人的....黑话

原来工作也是会被腌入味的 前段时间有位博主吐槽 工作太久都不会说人话了 这张口的互联网味儿 瞬间梦回自己的工位 而评论区的网友们表示 这不就是”世另我“吗 一场关于互联网黑话的"掰头" 就此开始了... 维护厨房 (厨房秒变公司) 新…

Bagging算法预测银行客户流失率

Bagging算法预测银行客户流失率 描述 为了防止银行的客户流失,通过数据分析,识别并可视化哪些因素导致了客户流失,并通过建立一个预测模型,识别客户是否会流失,流失的概率有多大。以便银行的客户服务部门更加有针对性…

【CSS】使用 CSS 实现三角形 ( 宽高设置为 0 | 设置四个边框宽度 / 样式 / 颜色值 | 兼容低版本浏览器 | 基本示例 | 对话框示例 )

文章目录一、使用 CSS 实现三角形二、使用 CSS 实现三角形代码示例三、使用 CSS 实现 对话框 代码示例一、使用 CSS 实现三角形 使用 CSS 实现三角形步骤 : 首先 , 宽度 / 高度 设置为 0 ; /* 宽高设置为 0 像素 */width: 0;height: 0;然后 , 设置 4 个边框 , 每个边框都要设置…

【软考备战·希赛网每日一练】2023年4月14日

文章目录一、今日成绩二、错题总结第一题第二题第三题第四题三、知识查缺题目及解析来源:2023年04月14日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 具有 最优子结构 特点的问题可以使用 动态规划法 进行求解。计算m数组中每项的值&am…

日撸 Java 三百行day28-30

文章目录说明day28-30 Huffman 编码 (节点定义与文件读取)1.建树过程(以图为例)2.哈夫曼树特点3.分析代码过程3.1 抽象成员变量3.2结合文章梳理思路1.读文本2.解析文本内容:3.建树4.生成哈夫曼编码5.编码6.解码4.其他4.1 java 类型强转4.2 ja…

网络安全相关的知识

一、 什么是IDS? IDS是英文"Intrusion Detection Systems"的缩写,中文意思是"入侵检测系统"。专业上讲就是依照一定的安全策略,通过软、硬件,对网络、系统的运行状况进行监视,尽可能发现各种攻击…

TexMaker(Latex编辑器)软件的“文献引用”操作:Xelatex方式运行的操作方法

一、说明 1. 针对问题 本文主要讲解使用TexMaker进行**.bib的方法**的文献引用时,如何使用Xelatexpdf的方式完成文献引用。某些文章强调使用PDFlatex进行编译,但有时候会因为论文模板不同,无法运行padflatexPDF。所以,这里给出xe…

常用模块和模板引擎

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

Android---导致OOM的常见原因

目录 内存溢出OOM 单应用可用的最大内存 导致 OOM 的常见原因 内存实时监控 内存溢出OOM 单应用可用的最大内存 dalvik.vm.heapstartsize,它表示堆分配的初始大小。 dalvik.vm.heapgrowthlimit,它表示单个进程内存限定值。 dalvik.vm.heapsize&#…

LeetCode每日一题 1023. 驼峰式匹配 --双指针

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

Vue UI组件库(Element UI库)

1 移动端常用 UI 组件库 1. Vant Vant 4 - 轻量、可定制的移动端组件库 (vant-ui.github.io) 2. Cube UI cube-ui Document (didi.github.io) 3. Mint UI Mint UI (mint-ui.github.io) 2.PC 端常用 UI 组件库 1.Element UI Element - 网站快速成型工具 2.IView UI iView / Vi…

SpringBoot集成WebSocket实现及时通讯聊天功能!!!

1&#xff1a;在SpringBoot的pom.xml文件里添加依赖: <!-- websocket --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2&#xff1a;在配置中…

C++简单工厂模式

目录 什么是简单工厂模式 简单工厂模式的实现 总结 什么是简单工厂模式 简单工厂模式是一种创建型设计模式&#xff0c;它提供了一种创建对象的最佳方式。在软件开发中&#xff0c;我们经常需要创建各种各样的对象&#xff0c;但是直接使用 new 关键字来创建对象会使代码变得…

Node http模块

文章目录Node http模块概述创建http服务获取请求报文练习搭建http服务url模块解析url操作url设置响应报文练习搭建网页Node http模块 概述 http模块提供了创建 HTTP 服务器和客户端的功能。 创建http服务 // 导入http模块 const http require("http");// 创建服…

React | React的JSX语法

✨ 个人主页&#xff1a;CoderHing &#x1f5a5;️ Node.js专栏&#xff1a;Node.js 初级知识 &#x1f64b;‍♂️ 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; &#x1f4ab; 系列专栏&#xff1a;吊打面试官系列 16天学会Vue 11天学会React Node专栏 &#…

商医通项目总结

一、项目概述 简介 尚医通即为网上预约挂号系统&#xff0c;网上预约挂号是近年开展的一项便民就医服务&#xff0c;旨在缓解看病难、挂号难的就医难题。网上预约挂号全面提供的预约挂号业务从根本上解决了这一就医难题。随时随地轻松挂号&#xff0c;不用排长队 微服务项目…