[TOC]
## 簡介
**1.啟動電源以及系統啟動**
當電源按下時引導芯片代碼開始從預定義的地方(固化在ROM)開始執行。加載引導程序Bootloader到RAM,然后執行。
**2.引導程序BootLoader**
引導程序BootLoader是在Android操作系統開始運行前的一個小程序,它的主要作用是把系統OS拉起來并運行。
**3.Linux內核啟動**
內核啟動時,設置緩存、被保護存儲器、計劃列表、加載驅動。當內核完成系統設置,它首先在系統文件中尋找init.rc文件,并啟動init進程。
**4.init進程啟動**
初始化和啟動屬性服務,并且啟動Zygote進程。
**5.Zygote進程啟動**
創建JavaVM并為JavaVM注冊JNI,創建服務端Socket,啟動SystemServer進程。
**6.SystemServer進程啟動**
啟動Binder線程池和SystemServiceManager,并且啟動各種系統服務。
**7.Launcher啟動**
被SystemServer進程啟動的ActivityManagerService會啟動Launcher,Launcher啟動后會將已安裝應用的快捷圖標顯示到界面上 。

## init進程啟動
1.創建一些文件夾并掛載設備
2.初始化和啟動屬性服務
3.解析init.rc配置文件并啟動zygote進程
## Zygote進程總結
1.創建AppRuntime并調用其start方法,啟動Zygote進程。
2.創建DVM并為DVM注冊JNI.
3.通過JNI調用ZygoteInit的main函數進入Zygote的Java框架層。
4.通過registerZygoteSocket函數創建服務端Socket,并通過runSelectLoop函數等待ActivityManagerService的請求來創建新的應用程序進程。
5.啟動SystemServer進程。
## SystemServer進程啟動
1.啟動Binder線程池,這樣就可以與其他進程進行通信。
2.創建SystemServiceManager用于對系統的服務進行創建、啟動和生命周期管理。
3.啟動各種系統服務。
## Launcher進程啟動
SyetemServer進程在啟動的過程中會啟動PackageManagerService,PackageManagerService啟動后會將系統中的應用程序安裝完成。在此前已經啟動的ActivityManagerService會將Launcher啟動起來。
## 參考資料
[Android框架層](http://liuwangshu.cn/categories/Android%E6%A1%86%E6%9E%B6%E5%B1%82/page/3/)
[]()https://blog.csdn.net/freekiteyu/article/details/79175010
- Android
- 四大組件
- Activity
- Fragment
- Service
- 序列化
- Handler
- Hander介紹
- MessageQueue詳細
- 啟動流程
- 系統啟動流程
- 應用啟動流程
- Activity啟動流程
- View
- view繪制
- view事件傳遞
- choreographer
- LayoutInflater
- UI渲染概念
- Binder
- Binder原理
- Binder最大數據
- Binder小結
- Android組件
- ListView原理
- RecyclerView原理
- SharePreferences
- AsyncTask
- Sqlite
- SQLCipher加密
- 遷移與修復
- Sqlite內核
- Sqlite優化v2
- sqlite索引
- sqlite之wal
- sqlite之鎖機制
- 網絡
- 基礎
- TCP
- HTTP
- HTTP1.1
- HTTP2.0
- HTTPS
- HTTP3.0
- HTTP進化圖
- HTTP小結
- 實踐
- 網絡優化
- Json
- ProtoBuffer
- 斷點續傳
- 性能
- 卡頓
- 卡頓監控
- ANR
- ANR監控
- 內存
- 內存問題與優化
- 圖片內存優化
- 線下內存監控
- 線上內存監控
- 啟動優化
- 死鎖監控
- 崩潰監控
- 包體積優化
- UI渲染優化
- UI常規優化
- I/O監控
- 電量監控
- 第三方框架
- 網絡框架
- Volley
- Okhttp
- 網絡框架n問
- OkHttp原理N問
- 設計模式
- EventBus
- Rxjava
- 圖片
- ImageWoker
- Gilde的優化
- APT
- 依賴注入
- APT
- ARouter
- ButterKnife
- MMKV
- Jetpack
- 協程
- MVI
- Startup
- DataBinder
- 黑科技
- hook
- 運行期Java-hook技術
- 編譯期hook
- ASM
- Transform增量編譯
- 運行期Native-hook技術
- 熱修復
- 插件化
- AAB
- Shadow
- 虛擬機
- 其他
- UI自動化
- JavaParser
- Android Line
- 編譯
- 疑難雜癥
- Android11滑動異常
- 方案
- 工業化
- 模塊化
- 隱私合規
- 動態化
- 項目管理
- 業務啟動優化
- 業務架構設計
- 性能優化case
- 性能優化-排查思路
- 性能優化-現有方案
- 登錄
- 搜索
- C++
- NDK入門
- 跨平臺
- H5
- Flutter
- Flutter 性能優化
- 數據跨平臺