Android framework——Activity的啓動和建立


 本人制做的app:1號密碼 歡迎試用android

  最近學習Android相關知識,感受僅僅瞭解Activity幾個生命週期函數基本上沒有任何意義的;app

因而想深刻了解一下Activity究竟是怎麼一回事怎麼運行來的;裏面的東東真是叫個龐大;框架

如今只能簡單的瞭解其框架性的概念和流程;socket

一 Activity概念

  Android的核心不是Application而是Activity,至少在咱們開發的時候是這樣的;函數

  Activity就是被用來進行與用戶交互和用來與android內部特性交互的組件,學習

在應用程序中用到的全部activity都須要在manifest.xml文件中進行註冊;線程

那麼Activity又是怎樣一種組件,怎麼樣進行顯示交互的,一個activity實例是如何被管理和運行起來的,activity生命週期又是怎麼一回事。代理

二 Activity框架和管理結構

Activity管理的核心是AcitivityManagerService,是一個獨立的進程;xml

ActiveThread是每個應用程序所在進程的主線程,循環的消息處理;htm

ActiveThread與AcitivityManagerService的通訊是屬於進程間通訊,使用binder機制;

 

 

    

 

 

三 Activity啓動過程

以啓動一個應用程序startActivity爲例看一下代碼執行的大概流程:

 

    

 

可將其分爲6個過程:

1 使用代理模式啓動到ActivityManagerService中執行;

2 建立ActivityRecord到mHistory記錄中;

3 經過socket通訊到Zgote相關類建立process;

4 經過ApplicatonThread與ActivityManagerService創建通訊;

5 ActivityManagerService通知ActiveThread啓動Activity的建立;

6 ActivityThread建立Activity加入到mActivities中並開始調度Activity執行;

請看下圖:

  

          

 

並非全部啓動一個Activity都是這樣的過程:一個應用程序中全部Activity只有一個ActivityThread屬於一個Process;

         ActivityStack並非每次都須要建立一個Stack來管理Activities;

下面看看adnroid系統中四個重要概念:

Application:由多個相關的鬆散的與用戶進行交互Activity組成,一般被打包成apk後綴文件中;

Activities:應用程序的主要組成部分,是應用程序的核心;

ActivityStack:將應用程序中打開的Activity保存在歷史棧中,按照棧的先進後出的原則;

Start Activity時入棧,返回時出棧;

Task:將一系列相關的Activity組合,完成某個應用程序完整操做;無論activity屬於哪

個Application的;

例如:寫信息—調用—文件管理,都屬於一個Task,但屬於兩個Application;

 

四 Activity啓動流程類結構分析

1 ActivityService相關類

 

使用了Proxy代理模式:ActivityManagerProxy代理ActivityManagerService;

併爲之提供了公共的訪問接口:IActivityManager;

 

 

    

2 Activity啓動 

  

    

 

3 ActivityStack管理

   

    

ActivityStack建立並存儲系列建立的Activity實例,將其入棧管理mHistory;

4 ActivityThread

         This manages the execution of the main thread in anapplication process,

scheduling and executing activities,broadcasts, and other operations on it as the activity manager requests.

         是應用程序的主線程,消息循環執行者;其中有不少的內部類來完成工做;

  ActivityThread使用內部類:ApplicationThread與ActivityManagerService進行通訊,

  ActivityThread將狀態變化傳遞控制客戶端Activity的狀態執行;

   mActivities保存由ActivityStack所建立的ActivityRecord相關實例引用;

    

 

 

本人開發的app:歡迎各位兄弟試用:

http://android.myapp.com/myapp/detail.htm?apkName=com.xcy.xpassword

相關文章
相關標籤/搜索