AMS和WMS

AMS

ActivityManagerService是Android系统中一个特别重要的系统服务,也是上层APP打交道最多的系统服务之一(几乎所有的APP应用都需要与AMS打交道)。

AMS与操作系统中的进程管理和调度模块很像,在Android系统中非常重要,涉及到的知识点也非常多。想要了解Android的内部工作机制,就必须先了解AMS的工作原理。

AMS(ActivityManagerService)贯穿了Android系统组件的核心服务,主要负责Android系统中四大组件的启动、切换、调度以及应用进程管理和调度工作。

比如在Activity的启动流程中,AMS就是组件管理调度中心,什么都不干,但什么都管!Android系统从开机到桌面,再到APP启动的完整流程,AMS无所不在……

当我们深刻了解Android启动流程与AMS特性之后,就可以解决项目开发中的很多问题,比如:

屏幕适配、自定义View和ViewGroup、APK加固、热修复、组件化路由、皮肤换肤、插件化、leakCanary内存问题分析、Hilt注入、Jetpack原理、Glide原理、RXJava原理、launchModel、权限验证、四大组件等相关逻辑和代码……

深刻了解之后能帮助Android开发者更加灵活的进行项目开发。

AMS本身是比较复杂的,很多工作多年的Android开发也不太明白AMS的作用。

  • AMS是如何启动的?
  • 如何理解startActivity的流程?
  • 我们是如何应用AMS的核心原理?
  • ……

我们需要探索的问题还有很多,比如我们在开发中遇到的跳转问题、栈的管理问题、ANR问题等等都是与AMS对四大组件的管理息息相关,只有掌握了AMS,才能更加高效的开发出优质的app

WMS

而开发中各种UI显示异常的bug都可以在WMS体系中找到对应的解决办法和对应原理。因为WMS管理着所有的窗口,包括创建、删除和修改,以及将某个窗口设置为焦点窗口。

WMS 的作用

WMS为所有窗口分配Surface。客户端向WMS添加一个窗口的过程,其实就是WMS为其分配一块Suiface的过程,一块块Surface在WMS的管理下有序的排布在屏幕上。Window的本质就是Surface。

管理Surface的显示顺序、尺寸、位置

管理窗口动画

输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息,而WMS是窗口的管理者,系统中所有的窗口状态和信息都在其掌握之中,完成这一工作不在话下。

所以,如果你的定位是做界面开发,那么界面怎么来的?如何显示的?如何布局?如何渲染……要明白这些问题,WMS就是你必须掌握的内容

为了帮助到大家更好的了解Android Framework框架中的所有知识点,这边查阅大量的素材,整理出了这 《Android Framework 核心知识点手册》,里面记录了:有Handler、Binder、AMS、WMS、PMS、事件分发机制、UI绘制……等等,几乎把更Framework相关的知识点全都记录在册了

《Android Framework学习手册》:https://qr18.cn/AQpN4J

  1. 开机Init 进程
  2. 开机启动 Zygote 进程
  3. 开机启动 SystemServer 进程
  4. Binder 驱动
  5. AMS 的启动过程
  6. PMS 的启动过程
  7. Launcher 的启动过程
  8. Android 四大组件
  9. Android 系统服务 - Input 事件的分发过程
  10. Android 底层渲染 - 屏幕刷新机制源码分析
  11. Android 源码分析实战

什么是AMS?什么是WMS?相关推荐

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

    原理 在Android系统中,AMS(Activity Manager Service).PMS(PackageManager Service)和WMS(Window Manager Service) ...

  2. AndroidQ 分屏窗口模式 (AMS部分)

    1. 多窗口 1.1 栈 Android7.0开始支持多窗口,多窗口分为三种,画中画,分屏,自由窗口,多窗口的核心原理其实就是分栈和设置栈边界, 分栈即把不同窗口模式下的Activity放在不同的Ac ...

  3. Android内核开发必备知识

    窗口切换逻辑设计中需要解决的问题 Android中的窗口管理系统中,首先在AmS中保存所有与Activity 相关的信息,在Activity启动和关闭时,AmS会通知WmS同步Activity窗口的状 ...

  4. android surfaceflinger研究----SurfaceFlinger loop

    上一篇文章介绍了整个Surface机制(我是这么称呼的,主要是Surface的建立,Surface的显示存储的管理),同时我们也介绍过了整个显示系统,那么这篇文章就介绍一下SurfaceFlinger ...

  5. Android 系统(246)---SystemServer进程的启动流程

    Android进程系列第四篇---SystemServer进程的启动流程 一.内容预览 内容预览.png 二.概述 前面进程系列已经更新了三篇,本文(基于Android O源码),第三篇中System ...

  6. 如何深入学习 Android Framework

    为什么要学 Framework 为什么要学 Framework?最直接最功利的原因就是面试要问,比如: Activity 的启动过程,这个会涉及到 AMS/ATMS 和 WMS 的实现 Binder ...

  7. Android Launcher启动流程

    Launcher App 由SystemServer启动,而SystemServer由Zygote进程孵化出来的. Zygote是孵化器,所有其他Dalvik/ART虚拟机进程都是用过zygote孵化 ...

  8. Android卡顿检测及优化

    前言 之前在项目中做过一些Android卡顿以及性能优化的工作,但是一直没时间总结,趁着这段时间把这部分总结一下. 卡顿 在应用开发中如果留意到log的话有时候可能会发下下面的log信息: I/Cho ...

  9. 阿里腾讯大规模裁员30%内部人士这样说...

    2022年的春天,并不太平. 本以为裁员潮已经退去,即将迎来的金三银四会给就业市场带来温暖的春意. 但就在3月13日,有传言称:腾讯阿里等互联网巨头会在未来几周内大裁员.据员工内部猜测腾讯预计裁员10 ...

  10. 项目维护几年了,为啥还这么卡?

    浅谈 前段时间有个客户问我,为啥你们项目都搞了好几年了,为啥线上还会经常反馈卡顿,呃呃呃.. 于是根据自己的理解以及网上大佬们的思路总结了一篇关于卡顿优化这块的文章. 卡顿问题是一个老生常谈的话题了, ...

最新文章

  1. Spring 面试问题 TOP 50
  2. 远程连接计算机用户名怎样修改,更改服务器远程桌面用户名
  3. 人性 - 社会 - 经济 - 科学
  4. php如何水平对齐所有星星,css怎么设置水平对齐
  5. python对数据进行分类_在Python中对一系列数据进行分类的最佳方法
  6. web developer tips (19):设置默认视图为设计视图
  7. 2022年,ICPC比赛、CCPC比赛、CCF-CSP考试、蓝桥杯比赛、天梯赛日程
  8. spark reduceByKey源码解析
  9. 挑战程序设计竞赛-小笔记
  10. CIELAB色差计算
  11. 10本Java架构师必读书籍推荐
  12. 热带鱼屏保(Marine Aquarium 3),如何才能绕过它的Key Code?
  13. 经济应用文写作【5】
  14. 致信息安全专业同学的一封信
  15. python演示,用经验分布逼近总体精确分布
  16. 12星座的出生年月日性格_十二星座的出生日期及对应性格
  17. 笔记本有线网络共享为WiFi
  18. 如何实现windows命令提示符的tab补全
  19. 图神经网络学习(一)
  20. VBA对EXCEL某列进行排序操作

热门文章

  1. 《Linux就该这么学》_Day1_ch00
  2. 学习linux要多久?linux学习
  3. 清华向勇《操作系统》Lab1-2 记录:QEMU使用小结
  4. SmartGit使用
  5. Tengine服务器搭建
  6. RAC 管理(crs_stat、crsctl、srvctl)
  7. 【python图像处理】单张图像拼接与批量图片拼接
  8. 早期的个人计算机,早期计算机主要用于什么,
  9. css文本超出 自动换行
  10. 直播系统开发:直播行业进入多元化的发展方向