现在的移动开发人才市场上,初中级开发者几乎都是人满为患,互联网公司对移动开发人员的招聘要求也越来越高,尤其是那些大厂,非常看重开发者对底层的掌握。

大家可以先来看一组大厂的面试题:

  • AMS是如何启动的?

  • AMS在Android起到什么作用?

  • AMS有哪些应用场景?我们是如何应用AMS核心原理的?

  • WMS的工作原理说说?

这些底层问题能回答上来吗?是不是有一定难度?

其实很多的移动开发者都止步于这个水平,要想再进一步深入发展很难,进阶学习成为了一个迫在眉睫又进展艰难的点。

进阶学习难吗?有一定难度。工作和学习遇到瓶颈后我们需要钻研底层原理,而现在我们基本上都是上班怼业务业务代码,晚上经常性加班赶任务进度,回到家已经很累了,很少有时间去提升自己的技术。钻研底层原理对我们来说相当奢侈。

钻研底层就离不开源码,而《Android源码与设计模式》一书的作者说:“可以毫不夸张的说,Android的framework层主要是由WMS、AMS还有View所构成,这三个模块穿插交互在整个framework中,掌握了它们之间的关系和每一个逻辑步骤,你对framework的了解至少有百分之五十”。

今天终于有人把AMS和WMS讲明白了!不服不行!

/   AMS和WMS   /

AMS

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

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

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

▲ Activity启动流程图

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

当我们深刻了解Android启动流程与AMS特性之后,就可以解决项目开发中的很多问题,比如:屏幕适配、自定义View和ViewGroup、APK加固、热修复、组件化路由、皮肤换肤、插件化、leakCanary内存问题分析、Hilt注入、Jetpack原理、Glide原理、RXJava原理、launchModel、权限验证、四大组件等相关逻辑和代码……

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

▲ AMS主要类关系图

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

  • AMS是如何启动的?

  • 如何理解startActivity的流程?

  • 我们是如何应用AMS的核心原理?

  • ……

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

WMS

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

▲ WMS主要类关系图

WMS 的作用

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

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

  • 管理窗口动画

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

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

此处一文实在难以详尽,所以在这里我们邀请腾讯课堂的Alvin老师和Leo老师用两节的课的时间对这两个知识点进行详细的讲解!

/   专属福利   /

网上Android Framework源码相关资料挺多,但是都比较零散,有体系的,高质量的很少,可能还充斥着大量的错误信息,使得很多开发者掉到坑里爬不出来。

有了这份学习笔记,可以帮助大家对Android Framework源码有更系统和更加深入的理解。

/   适合人群   /

1.有一定android开发经验

2.希望尽快突破面试问题的开发者

3.缺少一线互联网公司项目开发经验

4.工作年限长却长期没有突破,渴望快速提升自己

/   课程安排   /

授课讲师

Alvin老师

华南理工大学研究生毕业,十余年互联网从业经验;

曾就职于三星/小米,担任项目经理,技术经理等;

国内首批Android底层技术导航人,主持改写过Android手机系统架构。

专精领域:精通Android FrameWork源码及性能优化;三星手机Rom核心架构设计,专注NDK底层设计与开发。

Leo老师

多年Android项目研发经验,3年创业经验,担任创业公司技术总监,公司曾获得BAT战略投资。

专精领域:精通Android架构,性能优化,flutter混合开发等技术。讲课认真负责。

课程排期

5.25 WMS你必须知道的那些事

1.View 绘制流程

2.View度量和布局的原理

3.彻底掌握 Activity View window的分工设计逻辑

4.WMS如何管理 View

5.WMS如何与AMS等进程进行交互

5.26 Android面试季必问 AMS的核心原理

1.AMS是如何启动的

2.如何理解startActivity的流程

3.AMS对Activity生命周期的管理

4.AMS核心原理的实际应用

/   报名获取   /

文中福利免费赠给参加训练营的学员

加薇薇老师微信报名训练营

立即学习

(如遇扫码频繁受限,点击左下角的阅读原文

推荐阅读:

我的新书,《第一行代码 第3版》已出版!

论Flutter开发如何改善套娃地狱问题

国内首个 Jetpack Compose 官方教程正式上线!

不服不行!终于有人把AMS和WMS讲明白了!相关推荐

  1. 终于有人把大数据架构讲明白了

    导读:如何存储.如何利用大规模的服务器集群处理计算才是大数据技术的核心. 作者:李智慧 来源:大数据DT(ID:hzdashuju) 大数据技术其实是分布式技术在数据处理领域的创新性应用,其本质和此前 ...

  2. 终于有人把A/B测试讲明白了

    导读:对照实验有时也称为A/B测试.A/B/n 测试(强调多变体测试).实地实验.随机对照实验.分拆测试.分桶测试和平行飞行测试.本文带你了解一些相关术语及应用案例. 作者:罗恩·科哈维(Ron Ko ...

  3. 终于有人把红蓝对抗讲明白了

    导读:什么是红蓝对抗? 我们现在所处的时代,有人称为网络时代,有人称为信息时代,也有人称为数据时代,不管名字怎么叫吧,我想有一件事已经成为了共识,那就是我们的安全观念得要跟上时代发展. 都知道重要的东 ...

  4. 终于有人把如何精通C++讲明白了!

    2020年的最后1个月,C++20的标准正式公布了,它的变化有多大? 先来看一张图: 分别用C++11和C++20编写代码,来实现同一个数据操作的功能 显而易见,C++的代码变得更简洁了,甚至有人说, ...

  5. 6大准则+10道习题,终于有人把怎样选择图表讲明白了

    来源:大数据DT 本文约2300字,建议阅读7分钟 本文为大家介绍考虑图表类型时,该遵循那些指导原则. [ 导读 ] "我可以使用饼形图吗?"这里引用的提问是真实的,令人失望的是, ...

  6. 终于有人把“可解释机器学习”讲明白了

    1 为什么需要解释 机器学习模型的可解释性(Interpretability)最近说得越来越多,这也是个有趣的话题.可解释性不是个新概念,很多书在介绍机器学习模型时,都会顺带提一笔这款模型的可解释性如 ...

  7. 终于有人把分布式事物TCC讲明白了

    https://www.cnblogs.com/jajian/p/10014145.html

  8. 终于有人把ROS机器人操作系统讲明白了

    导读:机器人是多专业知识交叉的学科,通常涉及传感器.驱动程序.多机通信.机械结构.算法等,为了更高效地进行机器人的研究和开发,选择一个通用的开发框架非常必要,ROS(Robot Operating S ...

  9. 终于有人把可解释机器学习讲明白了

    导读:为了解决模型的"黑盒"问题,科学家们提出了可解释机器学习.除了预测的精准性之外,可解释性也是机器学习模型是否值得信赖的重要衡量标准. 可解释机器学习(IML)的核心思想在于选 ...

最新文章

  1. 关于JS面向对象、设计模式、以及继承的问题总结
  2. Practical Common Lisp
  3. rust门卡有什么用_Rust能力养成之(10)用Cargo进行项目管理:扩展 调用与优化
  4. dell驱动安装工具_技术丨如何快速安装显卡驱动
  5. java 中的点_java————形参中的点点点 | 学步园
  6. ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台
  7. 计算机设备管理程序在哪,怎么打开设备管理器
  8. 一种非常简单的静态网页生成方法介绍
  9. java locationuitool_求助systemui编译时哪里出错
  10. iOS 中 #import同@class之间的区别
  11. 0005-Windows Kerberos客户端配置并访问CDH
  12. Android高级开发面试题目,再也不用担心不能升职加薪了。
  13. 数据结构在程序中的实现及表现形式
  14. Softmax 回归 + 损失函数 + 图片分类数据集 动手学深度学习v2 pytorch
  15. Java初学练手,一款汽车车牌号生成小工具
  16. 漏洞CNNVD-201805-248的复现与提权
  17. html怎么制作壁纸,CSS3制作皮卡丘动画壁纸的示例
  18. y的花式写法_26个字母的花式写法,总有一个你喜欢哒
  19. 全球及中国代餐轻食市场发展现状与消费需求前景调研报告2022版
  20. 《JavaScript_DOM编程艺术》Chapter05 最佳实践,Chapter06 图片库改进版---20210427

热门文章

  1. 批量提取pdf文件名到excel
  2. 耳穴诊疗长期跟踪0524
  3. PS怎样反图片变成轮廓线效果
  4. 【算法数据结构初阶篇】:位图bitMap
  5. 小程序如何帮助超市拓展线上销售渠道、拉新引流、增加销量?
  6. 生日快乐代码_祝雪无生日快乐! 5孔无级别罗汉真来了~只是…… 阿海千亿十连开...
  7. 计算机基础:原码补码反码计算
  8. 6大顶级自学资源网站!不甘现状,学无止境
  9. 值得收藏的旭日阳刚的几首歌视频
  10. C++ 关键字auto tcy