前言
首先一点,这是一条 2021 的旧闻。
关键是这两天知乎每天都会推送给我这个问题,昨天和今天看到至少不下三次了。然后,没忍住,我就想聊一聊这话题吧。
当时事情是这样的,有网友在某官方平台上留言:“我是一名软件开发人员,今年 45 岁,精通各种技术体系…… 而我辞职回家半年后再回来寻找工作机会的时候,却发现连个面试机会都很难得到。”
然后引起了央视网的关注。
我看很多人都在举例子,比如:
C 语言之父,33 岁开始着手 C 语言整体架构开发;
Python 之父,在 36 岁开始着手创建 Python 语言,在他 50 岁时候,加入 Google,用 Python 为 Google 开发了浏览器;
Java 之父,在他 40 岁时候创建了 Java 语言。
为什么他们在三四十岁甚至五六十岁还能持续地贡献呢? 而我们,为什么过了三十岁就充满了职业危机感,得想着以后的出路,就要战战兢兢地担心被裁员呢?
想想也挺悲哀的,国内大学毕业一般是22岁,如果再上个研究生出来就25了,工作没几年就要面对这种窘境。
其实三十到四十岁之间应该是程序员的黄金年龄,度过了菜鸟阶段,经历过多个项目的风吹雨打,有着丰富的经验,很强的洞察力,应该是创造力的巅峰才对。 这样的人应该被公司千方百计地留住,但现实是要面对如此巨大的生存压力!
我想一个主要原因是:国内的互联网行业主要在应用层激烈竞争。
得益于中国的海量用户,网站的并发量,数据量都很大,对于架构设计、软件开发、项目管理都提出了很高的挑战,也诞生了一些很好的开源软件,在局部领域也有很大突破,但是不得不说的是,我们绝大部分公司离底层的核心技术还比较遥远,主要在应用层和商业模式上折腾。
在应用层激烈竞争的结果就是程序员的可替代性比较强,谁能加班谁上,谁性价比高谁上。
以中国庞大的人口基数,我相信肯定有很多非常厉害的软件天才,在三四十岁的黄金年龄做出厉害的成果。 只是还没有合适的土壤让他们去尽情地挥洒。他们的激情正在被996消磨,他们的灵感和创造力正在被现实生活扼杀。
但是如果你有核心技术,你跟别人竞争无需拼体力啊,核心技术领先于别人的话,一般人是很难超越的。尤其是对于基础技术的研究以及有专利的保护,这种强壁垒,一般很难被超越。
身为一个Android程序员
我们的视线不能仅仅停留在基础层面,而要了解Android系统级别的整个开发流程与思路、掌握应用层的逻辑、明白代码调用的原理、理解程序的本质、实现应用层无法实现的技术方案。
而Framework是Android开发中最基础,同时也是最重要的应用框架,对于绝大多数 Android 开发工程师来说,掌握Android Framework 是一个必须精通的技能。
从目前Android的招聘信息中来看,国内企业对于工程师在Framework方面的掌握程度普遍重视,Android Framework相关的岗位无论是市场需求、薪资待遇还是发展空间都非常可观。
抛开薪资,学习Framework还能给我们带来如下实质性的帮助:
- Framework是Android领域的基石,掌握Framework会让我们拥有更强的不可替代性。且Framework开发本身具有一定的门槛,是与其他人拉开差距的分水岭。
- Framework偏底层,技术迭代慢,几十年都不会有太大改变。而且只要Android不消失,Framework便永远有用武之地。
因此,无论是为了牢筑自己的自己技术的护城河,提升核心竞争力,还是在Android领域寻求一个长久的舒适区,都必须掌握Framework。
怎样学习Framework
为此,在这里分享一份前段时间整理收集的关于Android Framework的知识脑图总结和源码学习手册文档!既能够夯实底层原理、源码解析等核心技术点,又能够掌握普通开发者,难以触及的复杂系统问题设计方案;这些已经整理成了 PDF文档,
首先是详细的不能再详细的知识脑图
接着是与知识脑图配套的学习资料《Android Framework源码开发解析》
由于文档内容过多,因此为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的可以点击下方课程链接查看领取!
https://edu.51cto.com/course/32703.html
第一章 Android系统启动流程
- 第一节 Android启动概览
- 第二节 init.rc解析
- 第三节 Zygote
- 第四节 面试题
第二章 跨进程通信IPC
- 第一节 Sercice 还可以这么理解
- 第二节 Binder基础
- 第三节 Binder应用
- 第四节 AIDL应用(上)
- 第五节 AIDL应用(下)
- 第六节 Messenger原理及应用
- 第七节 服务端回调
- 第八节 获取服务(IBinder)
- 第九节 Binder面试题全解析
第三章 Handler源码解析
- 第一节 源码分析
- 第二节 难点问题
- 第三节Handler常问面试题
第四章 AMS 源码解析
- 第一节 引言
- 第二节 Android架构
- 第三节 通信方式
- 第四节 系统启动系列
- 第五节 AMS
- 第六节 AMS 面试题解析
第五章 WMS源码解析
- 第一节 WMS与activity启动流程
- 第二节 WMS绘制原理
- 第三节 WMS角色与实例化过程
- 第四节 WMS工作原理
- …
第六章 Surface源码解析
- 第一节 创建流程及软硬件绘制
- 第二节 双缓冲及SurfaceView解析
- 第三节 Android图形系统综述
- ......
第七章 基于Android12.0的SurfaceFlinger源码解析
- 第一节 应用建立和SurfaceFlinger的沟通桥梁
- 第二节 SurfaceFlinger的启动和消息队列处理机制
- 第三节 SurfaceFlinger 之 VSync(上)
- 第四节 SurfaceFlinger之VSync(中)
- 第五节 SurfaceFlinger之VSync(下)
- ......
第八章 PKMS源码解析
- 第一节 PKMS调用方式
- 第二节 PKMS启动过程分析
- 第三节 APK的扫描
- 第四节 APK的安装
- 第五节 PKMS之权限扫描
- 第六节 静默安装
- 第七节 requestPermissons源码流程解析
- 第八节 PKMS面试题
第九章 InputManagerService源码解析
- 第一节 Android Input输入事件处理流程(1)
- 第一节 Android Input输入事件处理流程(2)
- 第一节 Android Input输入事件处理流程(3)
第十章 DisplayManagerService源码解析
- 第一节 DisplayManagerService启动
- 第二节 DisplayAdapter和DisplayDevice的创建
- 第三节 DMS部分亮灭屏流程
- 第四节 亮度调节
- 第五节 Proximity Sensor灭屏原理
- 第六节 Logical Display和Physical Display配置的更新