【Android面試八股文】Android系統架構【一】

Android系統架構圖

1.1 安卓系統啟動

1.設備加電后執行第一段代碼:Bootloader

系統引導分三種模式:fastboot,recovery,normal:
fastboot模式:用于工廠模式的刷機。在關機狀態下,按返回+開機 鍵進入此模式
recovery模式:用于工程模式的刷機。按 home+開機 鍵進入此模式
normal模式:正常開機

2.Bootloader初始化CPU和硬件

3.Bootloader裝載操作系統映像或者固化的嵌入式應用程序到內存中

4.跳到操作系統的空間,啟動操作系統運行

5.Bootloader啟動內核和init進程,init進程并發出更多用來處理底層硬件的守護進程

6.init進程啟動"Ztgote"進程。接著它啟動第一個VM,用來預加載Android的framework和APP需要的通用資源。然后開啟一個Socket來監聽請求,基于預加載的VM孵化出一個新的VM創建一個新的進程

7.init進程啟動"runtime"進程,它啟用超級管理進程---System Server。接著SystemServer啟動所有系統核心服務,如ActivityManager Service,硬件相關的Service等。

8.操作系統啟用第一個App進程---Home進程

1.2 安卓應用啟動分析

1 ?每個應用都是在單獨的進程中,被系統分配一個唯一的user id。
2 ?一個進程,由一個主線程+多條子線程組成。主線程中有一個Looper實例,通過Looper.loop()隊列從Message隊列中取出Message來做相應的處理。
3 ?Android的系統界面基本都是由一些Activity組成,在Android系統里,Activity全部放在ActivityStack里管理。而ActivityStack是由ActivityManagerService內部管理的

APP的啟動流程:
1 ?點擊應用程序圖標,Launcher調用startActivity(intent)
系統啟動后,會啟動系統應用和用戶應用,而Launcher就是一個系統應用,也是有單獨的進程

2 ?Launcher通過Binder IPC機制, 調用到ActivityManagerService
進程與進程直接使用Binder機制來開啟應用


3 ?ActivityManagerService收集intent 信息,驗證權限
3.1 ?第一步通過PackageManager的resolveIntent()收集這個intent對象的指向信息

3.2 ?指向信息被存儲在一個intent對象中

3.3 ?下通過grantUriPermissionLocked()方法來驗證用戶是否有足夠的權限去調用該intent對象指向的Activity

3.4 ?如果有權限, ActivityManagerService會檢查并在新的task中啟動目標activity

4 ?開啟進程,打開應用的LaunchActivity
檢查這個進程的ProcessRecord是否存在,如果ProcessRecord是null, ActivityManagerService會創建新的進程來實例化目標activity

創建進程的過程:

1 ?ActivityManagerService調用startProcessLocked()方法來創建新的進程

2 ?startProcessLocked方法會通過socket通道傳遞參數給Zygote進程. Zygote孵化自身, 并調用ZygoteInit.main()方法來實例化ActivityThread對象并最終返回新進程的pid
3 ?ActivityThread隨后依次調用Looper.prepareLoop()和Looper.loop()來開啟消息循環

4 ?將進程和指定的Application綁定。ActivityThread對象中調用bindApplication()方法,該方法發送一個BIND_APPLICATION的消息到
消息隊列中, 最終通過handleBindApplication()方法處理該消息, 然后調用makeApplication()方法來加載App的classes到內存中

5 ?application的進程已存在,現在就是從一個已經存在的進程中啟動一個新進程的activity。先是調用realStartActivity(),該方法調用application線程對象中的sheduleLaunchActivity()發送一個LAUNCH_ACTIVITY消息到消息隊列中,handleLaunchActivity()會處理該消息,最后調用LaunchActiivity的onCreate來創建界面


1.3 圖

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77960.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77960.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77960.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jvm-獲取方法簽名的方法

在Java中,獲取方法簽名的方法可以通過以下幾種方式實現,具體取決于你的需求和使用場景。以下是詳細的介紹: 1. 使用反射 API Java 提供了 java.lang.reflect.Method 類來獲取方法的相關信息,包括方法簽名。 示例代碼&#xff1a…

DeepSeek和Excel結合生成動態圖表

文章目錄 一、前言二、3D柱狀圖案例2.1、pyecharts可視化官網2.2、Bar3d-Bar3d_puch_card2.3、Deepseek2.4、WPS2.5、動態調整數據 一、前言 最近在找一些比較炫酷的動態圖表,用于日常匯報,于是找到了 DeepseekExcel王牌組合,其等同于動態圖…

探索 .bat 文件:自動化任務的利器

在現代計算機操作中,批處理文件(.bat 文件)是一種簡單而強大的工具,它可以幫助我們自動化重復性任務,工作效率提高。盡管隨著編程語言和腳本工具的發展,.bat 文件的使用頻率有所下降,但它依然是…

PyTorch與自然語言處理:從零構建基于LSTM的詞性標注器

目錄 1.詞性標注任務簡介 2.PyTorch張量:基礎數據結構 2.1 張量創建方法 2.2 張量操作 3 基于LSTM的詞性標注器實現 4.模型架構解析 5.訓練過程詳解 6.SGD優化器詳解 6.1 SGD的優點 6.2 SGD的缺點 7.實用技巧 7.1 張量形狀管理 7.2 廣播機制 8.關鍵技…

【C++】特殊類的設計、單例模式以及Cpp類型轉換

📚 博主的專欄 🐧 Linux | 🖥? C | 📊 數據結構 | 💡C 算法 | 🌐 C 語言 上篇文章: C 智能指針使用,以及shared_ptr編寫 下篇文章: C IO流 目錄 特殊類的設…

探索 Flowable 后端表達式:簡化流程自動化

什么是后端表達式? 在 Flowable 中,后端表達式是一種強大的工具,用于在流程、案例或決策表執行期間動態獲取或設置變量。它還能實現自定義邏輯,或將復雜邏輯委托…… 后端表達式在 Flowable 的后端運行,無法訪問前端…

【Lua】Lua 入門知識點總結

Lua 入門學習筆記 本教程旨在幫助有編程基礎的學習者快速入門Lua編程語言。包括Lua中變量的聲明與使用,包括全局變量和局部變量的區別,以及nil類型的概念、數值型、字符串和函數的基本操作,包括16進制表示、科學計數法、字符串連接、函數聲明…

符號速率估計——小波變換法

[TOC]符號速率估計——小波變換法 一、原理 1.Haar小波變換 小波變換在信號處理領域被成為數學顯微鏡,不同于傅里葉變換,小波變換可以觀測信號隨時間變換的頻譜特征,因此,常用于時頻分析。 ??當小波變換前后位置處于同一個碼元…

android contentProvider 踩坑日記

寫此筆記原因 學習《第一行代碼》到第8章節實現provider時踩了一些坑,因此記錄下來給后來人和自己一個提示,僅此而已。 包含內容 Sqlite數據庫CURD內容provider界面provider項目中書籍管理provider實現邏輯用adb shell確認providercontentResolver接收…

Eureka、LoadBalance和Nacos

Eureka、LoadBalance和Nacos 一.Eureka引入1.注冊中心2.CAP理論3.常見的注冊中心 二.Eureka介紹1.搭建Eureka Server 注冊中心2.搭建服務注冊3.服務發現 三.負載均衡LoadBalance1.問題引入2.服務端負載均衡3.客戶端負載均衡4.Spring Cloud LoadBalancer1).快速上手2)負載均衡策…

【開關電源】關于GaN反激電源開關噪聲

文章目錄 0 前言1 設計信息1.1 設計需求1.2 原理圖1.3 電源表現 2 原因分析3 橫向對比TI UCG28826 (GaN)采購的普通QR反激變換器 4 總結 0 前言 筆者原計劃設計一款省電的,效率尚可的,穩定的2路輸出反激電源,用于系統…

DOCA介紹

本文分為兩個部分: DOCA及BlueField介紹如何運行DOCA應用,這里以DNS_Filter為例子做大致介紹。 DOCA及BlueField介紹: 現代企業數據中心是軟件定義的、完全可編程的基礎設施,旨在服務于跨云、核心和邊緣環境的高度分布式應用工作…

mybatis mapper.xml中使用枚舉

重點:application.propertis配置類 #TypeEnumHandler 這個類的包名,不是全路徑 mybatis.type-handlers-packagecom.fan.test.handler兩個枚舉類: public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…

鴻蒙生態:鴻蒙生態校園行心得

(個人觀點,僅供參考) 兄弟們,今天來淺淺聊一聊這次的設立在長沙的鴻蒙生態行活動。 老樣子,我們先來了解一下這個活動: Harmon&#x…

【速寫】多LoRA并行衍生的一些思考

遷移學習上的一個老問題,怎么做多領域的遷移?以前的邏輯認為領域遷移屬于是對參數做方向性的調整,如果兩個領域方向相左,實際上不管怎么加權相加都是不合理的。 目前一些做法想著去觀察LoRA權重矩陣中的稠密塊與稀疏塊&#xff0…

【Delphi 基礎知識 44】接口interface的應用

目錄 1. 前言2. 接口有哪些優勢2.1. 實現多態性2.2 實現多重(解決單繼承限制)2.3 解耦代碼(依賴注入)2.4 便于測試(模擬接口)2.5 跨語言互操作性(COM支持)1. 前言 總結為一句話就是:接口只告訴你要做什么,而類會告訴你應該怎么做 下面是最簡單的接口實現 typeIMyIn…

09.傳輸層協議 ——— TCP協議

文章目錄 TCP協議 談談可靠性TCP協議格式 序號與確認序號窗口大小六個標志位 確認應答機制(ACK)超時重傳機制連接管理機制 三次握手四次揮手 流量控制滑動窗口擁塞控制延遲應答捎帶應答面向字節流粘包問題TCP異常情況TCP小結基于TCP的應用層協議 TCP協…

NLP高頻面試題(五十一)——LSTM詳解

長短期記憶網絡(LSTM)相較于傳統循環神經網絡(RNN)的核心改進在于通過引入記憶單元(cell state)和門機制(gating mechanism)來有效緩解梯度消失與梯度爆炸問題,從而更好地捕捉長距離依賴關系 。在其網絡結構中,信息通過輸入門(input gate)、遺忘門(forget gate)和…

SpringCloud組件—Eureka

一.背景 1.問題提出 我們在一個父項目下寫了兩個子項目,需要兩個子項目之間相互調用。我們可以發送HTTP請求來獲取我們想要的資源,具體實現的方法有很多,可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 舉個例子&#x…

無需花錢購買域名服務器!使用 VuePress + Github 30分鐘搭建屬于自己的博客網站(保姆級教程)

前言 GitHub Pages 提供免費全球加速的服務器資源,VuePress 將 Markdown 變成藝術品級的網頁,僅需 30 分鐘,你便可以像提交代碼一樣發布文章,過程完全免費。 博客搭建好的效果如下:https://honorsong.github.io/exam…