Android FrameWork 概述


Framework是什么

    Framework的中文意思是“框架”,在軟件開發中通常指開發框架,在一個系統中處於內核層之上,為頂層應用提供接口,被設計用來幫助開發者快速開發頂層應用,而不必關心系統內核運行機制,通常Framework都會隱藏main函數等應用程序必須的組件,開發人員只需把精力放在功能代碼的實現上。

Android Framework

    Android Framework建立在頂層應用與C/C++庫之間,主要由三部分組成:服務端、客戶端、Linux驅動。它們的主要內容如下圖所示:

 APK程序的運行過程

    APK程序的運行流程大概如下圖所示:

 

    需要重點說明的是,ActivityThread是一個類,實例所在線程即為UI主線程,main方法就在ActivityThread類里面,是安卓應用程序的入口。ActivityThread對象在創建之前調用的prepareMainLooper()方法會實例一個Looper對象,該Looper對象會創建一個消息隊列,調用loop()方法后,UI線程會進入消息循環體,不斷從消息隊列里抽取消息並處理。ActivityThread的執行流程里面並沒有主動創建一個Activity,而是同通過創建一個ApplicationThread的Binder監聽來自遠方AmS的IPC調用,在收到創建Activity消息時才開始創建一個主Activity。創建Activity的具體流程如下:

 

    值得注意的是,W類繼承Binder類,它負責接收來自WmS的IPC調用,並將消息發送至DectorView,如果DectorView沒有處理,則傳遞給PhoneWindow,如果PhoneWindow沒有處理,則繼續傳遞給Activity,Activity通過Handler來處理此消息。

總結如下:一個安卓應用程序在運行之初總共會創建三個線程:ActivityThread、ApplicationThread、W。其中ActivityThread為UI線程,通過綁定一個Looper不斷抽取消息並處理,ApplicationThread與W均為Binder類,負責與遠方服務器端通信,ApplicationThread在主Activity創建之前創建,負責監聽AmS傳來的創建Activity消息,在Activity創建完畢后,W負責監聽WmS發來的消息,並將此消息傳給Activity。

服務器端

    設計服務器端是為了給在安卓機上運行的眾多頂層應用提供一個全局服務,主要由WmS與AmS構成,其中WmS主要負責監聽與處理與窗口相關的事件(如監聽用戶點擊、手勢),AmS主要負責管理Activity(如創建Activity)。當用戶在安卓機上觸發一個事件時,服務端會首先獲取這一事件,如果發現此事件屬於某一運行中的應用程序則利用Binder機制將其發送給此應用程序處理。

    WmS主要由兩個類組成:KeyQ類、InputDispatcherThread類。這兩個分別創建一個線程,KeyQ類負責不斷將用戶消息存儲到QueueEvent消息隊列中,InputDispatcherThread負責不斷從QueueEvent中取出消息進行處理或分發給相應應用。

 

 

 

 

---------參考自《Android內核剖析》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM