帶你讀源碼!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研習社全部,侵權必究

相關文章
相關標籤/搜索