前言
Android研习社正式成立将近一个月了,我们也在默默的做一些技术输出和沉淀
这篇文章算是研习社的正式官宣,也是记录第一期技术分享的一个讲义
什么?看讲义不过瘾?
将近一个半小时的技术分享视频,满足你的需求,带你一步一步读源码!
戳B站链接食用: www.bilibili.com/video/av688…
讲义正文
研习社官宣
研习社标语:成为高手,没那么简单
研习社精神:深挖技术,携手共进,鼓励大家进行技术输入和社群贡献,如博客,直播等形式
深入研究方向:Android源码,算法,Jvm虚拟机,开源项目(在研究现有流行库的基础上,重复造轮子)
源码阅读的一些体会
准备源码阅读工具
understand 可以代码跳转,方便查看调用
如何入手去读源码
看相关书籍和相关文章,有个大致的了解
书籍推荐 《最强Android书:架构大剖析 》《深入理解Android》
参考文章:www.jianshu.com/p/657336b54…
带着问题去读源码⭐️
从书籍或文章的阅读中找出问题点
Android系统启动流程相关问题: shimo.im/docs/WCTVGv…
针对读文章提出的问题点去读源码,读源码过程中有不理解的再去找相关文章,然后再返回来读源码验证
流程问题
- 系统启动都经历了哪些流程?涉及了哪些部分?
- 涉及的各个模块???
- 涉及的主要进程???
- idle进程主要做了什么事情?为什么需要在内核态运行?
- init是如何初始化的?为什么在内核态启动,在用户态运行?
- init进程主要做了什么事情???
属性服务
- 什么是属性服务?
- bionic包是主要负责哪些功能的?
- 属性服务的实现原理是什么???
- 属性服务是用来做什么的???
- 系统属性是如何共享的???
- 系统属性是如何初始化的???
- 系统属性如何设置的???
- 属性服务是如何启动的???
- StartPropertyService和epoll有什么关系?
- 为什么要创建socket监听?是用来做什么的?这个socket是客户端还是服务端???
- 其他进程是如何获取和修改系统服务的?
- 为什么可以直接设置属性,还需要开一个属性服务???
- 属性修改后如何通知其他进程?
- 属性服务的内部机制是什么?
其他问题
- init进程如何监听子进程运行状态?如果子进程挂了,怎么处理???
- zygote是如何沟通native世界和java世界的?它是如何启动的?由谁启动的?
- SystemServer是如何启动的?如何管理相关系统服务的启动的?都涉及哪里主要的系统服务?
- SurfaceFlinger是如何添加到ServerManager中的?
- 系统启动中的开机动画开启和结束涉及哪些系统服务?他们是如何工作的?
- 为什么SystemServer和App的设计类似?
- Launcher是由谁启动的?
- zygote进程是如何启动的???
抓大放小
细枝末节的东西,可以先舍弃,先过大概流程,和重要的过程函数
如果有时间,再去读具体的细节
什么是细枝末节?
不要等一切都准备好了再出发
研究Framework,要学的东西很多,c++,Linux
重视代码注释
代码注释可能会解释一些代码不好理解的概念
系统启动流程概述
具体源码解析
结合问题来读源码
-
涉及的各个模块
system bionic framework dalvik
-
init进程主要做了什么事情
-
系统属性是如何共享的
-
属性服务是如何启动的
-
zygote进程是如何启动的 juejin.cn/post/684490…
写在最后
觉得不错?不妨点个赞,然后关注一下?
郑重声明
本文原作者为释然,版权©️归Android研习社所有,侵权必究