阅读 588

带你读源码!Android研习社:技术分享第一期

前言

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

重视代码注释

代码注释可能会解释一些代码不好理解的概念

系统启动流程概述

juejin.im/post/684490…

具体源码解析

文章总结 juejin.im/post/684490…

结合问题来读源码

  • 涉及的各个模块

    system bionic framework dalvik

  • init进程主要做了什么事情

  • 系统属性是如何共享的

  • 属性服务是如何启动的

  • zygote进程是如何启动的 juejin.im/post/684490…

写在最后

觉得不错?不妨点个赞,然后关注一下?

郑重声明

本文原作者为释然,版权©️归Android研习社所有,侵权必究