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

前言java

Android研习社正式成立将近一个月了,咱们也在默默的作一些技术输出和沉淀c++

这篇文章算是研习社的正式官宣,也是记录第一期技术分享的一个讲义算法

什么?看讲义不过瘾?架构

将近一个半小时的技术分享视频,知足你的需求,带你一步一步读源码!socket

戳B站连接食用: www.bilibili.com/video/av688…ionic

讲义正文

研习社官宣

研习社标语:成为高手,没那么简单ide

研习社精神:深挖技术,携手共进,鼓励你们进行技术输入和社群贡献,如博客,直播等形式函数

深刻研究方向:Android源码,算法,Jvm虚拟机,开源项目(在研究现有流行库的基础上,重复造轮子)工具

源码阅读的一些体会

准备源码阅读工具

understand 能够代码跳转,方便查看调用post

如何入手去读源码

看相关书籍和相关文章,有个大体的了解

书籍推荐 《最强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/5d7ec5…

具体源码解析

文章总结 juejin.im/post/5d8405…

结合问题来读源码

  • 涉及的各个模块

    system bionic framework dalvik

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

  • 系统属性是如何共享的

  • 属性服务是如何启动的

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

写在最后

以为不错?不妨点个赞,而后关注一下?

郑重声明

本文原做者为释然,版权©️归Android研习社全部,侵权必究

相关文章
相关标签/搜索