近期收到了不少朋友的反馈说,失业半个月无人问津,放在前些年第二天开始面试有人找,或者是第二天入职了……,为啥明明不招人要挂着招人的岗位?
随着移动互联网的发展,Android市场的需求也在不断变化和升级。从以前的只要会写简单的几个业务需求就能随便找到一份好工作,升级到如今需要对Framework 底层框架要有一定的了解才能找到一份好工作。这一跨度的升级的变化,导致了不少Android 程序员面临了工作难找的问题,而熟悉Framework的人才却可以随便找工作。
如今一些公司招聘面试问的大多是Framework 底层相关的问题,像:AMS、WMS、PKMS、Binder、Handler……等,这些问题对于常年混在业务层的Android开发,并不是很友善,因为在日常开发中涉及到的很少,对其了解的程度也并不多。
所以下面给大家分析一下AMS在Android起到什么作用:
先来了解一下android系统启动的流程,如下图所示:
AMS(Activity Manager Service)是android系统中非常重要的一个系统服务,他主要负责四大组件的启动,切换,调度以及应用进程的管理和调度工作。
也就说所有的app应用都会和AMS打交道。
AMS作为系统的引导服务,是在SystemServer进程中启动SystemServer时创建并启动的。
AMS继承自IActivityManager.Stub ,作为系统服务的服务者提供系统服务。
AMS与操作系统中的进程管理和调度模块很像,除了在Android系统中非常重要之外,它涉及到的知识点也非常多。想要了解Android的内部工作机制,就必须先了解AMS的工作原理。
AMS扮演以下几个重要的角色:
1.应用程序生命周期管理:AMS负责跟踪和管理应用程序的生命周期,包括启动、暂停、停止和销毁应用程序的Activity。它确保每个Activity按照正确的顺序进行启动和销毁,以及在系统资源不足时进行适当的回收和释放。
2.任务栈管理:AMS负责管理应用程序的任务栈,它维护了当前打开的Activity的顺序和状态。AMS可以根据需要创建新任务栈,将Activity放入特定的任务栈中,并处理任务栈的切换和回退。
3.Activity生命周期回调:AMS通过调用Activity的生命周期方法(如onCreate,onStart,onResume等)向应用程序发送生命周期事件。这使得开发人员可以在适当的时机执行相关的操作,如保存和恢复用户界面状态,管理网络连接等。
4.任务间切换和应用程序交互:AMS负责处理应用程序之间的交互和切换。例如,当用户从一个应用程序切换到另一个应用程序时,AMS负责启动目标应用程序的相应Activity,并将新的任务栈放在前台,以供用户进行操作。
比如在Activity的启动流程中,AMS就是组件管理调度中心,什么都不干,但什么都管!Android系统从开机到桌面,再到APP启动的完整流程,AMS无所不在……
AMS在Android中起到了关键的作用,确保应用程序的正确运行和管理,以及提供良好的用户体验。
当我们深刻了解Android启动流程与AMS特性之后,就可以解决项目开发中的很多问题,比如:屏幕适配、自定义View和ViewGroup、APK加固、热修复、组件化路由、皮肤换肤、插件化、leakCanary内存问题分析、Hilt注入、Jetpack原理、Glide原理、RXJava原理、launchModel、权限验证、四大组件……等相关逻辑和代码
深刻了解之后能帮助Android开发者更加灵活的进行项目开发。
AMS本身是比较复杂的,很多工作多年的Android开发也不太明白AMS的作用。
- AMS是如何启动的?
- 如何理解startActivity的流程?
- 我们是如何应用AMS的核心原理?
- ……
我们需要去探索的问题还有很多,比如我们在开发中遇到的跳转问题、栈的管理问题、ANR问题等等都是与AMS对四大组件的管理息息相关,只有掌握了AMS,才能更加高效的开发出优质的app。
为帮助大家解除这类问题的困扰,这边搜阅了大量的素材,整理了一下的 Android Framework 核心知识点手册,里面记录了:有Handler、Binder、AMS、WMS、PMS、事件分发机制、UI绘制……等等,几乎把更Framework相关的知识点全都记录在册了
《Framework 核心知识点汇总手册》:https://qr18.cn/AQpN4J
Handler 机制实现原理部分:
1.宏观理论分析与Message源码分析
2.MessageQueue的源码分析
3.Looper的源码分析
4.handler的源码分析
5.总结
Binder 原理:
1.学习Binder前必须要了解的知识点
2.ServiceManager中的Binder机制
3.系统服务的注册过程
4.ServiceManager的启动过程
5.系统服务的获取过程
6.Java Binder的初始化
7.Java Binder中系统服务的注册过程
Zygote :
- Android系统的启动过程及Zygote的启动过程
- 应用进程的启动过程
AMS源码分析 :
- Activity生命周期管理
- onActivityResult执行过程
- AMS中Activity栈管理详解
深入PMS源码:
1.PMS的启动过程和执行流程
2.APK的安装和卸载源码分析
3.PMS中intent-filter的匹配架构
WMS:
1.WMS的诞生
2.WMS的重要成员和Window的添加过程
3.Window的删除过程
《Android Framework学习手册》:https://qr18.cn/AQpN4J
- 开机Init 进程
- 开机启动 Zygote 进程
- 开机启动 SystemServer 进程
- Binder 驱动
- AMS 的启动过程
- PMS 的启动过程
- Launcher 的启动过程
- Android 四大组件
- Android 系统服务 - Input 事件的分发过程
- Android 底层渲染 - 屏幕刷新机制源码分析
- Android 源码分析实战