本人制做的app:1號密碼 歡迎試用android
最近學習Android相關知識,感受僅僅瞭解Activity幾個生命週期函數基本上沒有任何意義的;app
因而想深刻了解一下Activity究竟是怎麼一回事怎麼運行來的;裏面的東東真是叫個龐大;框架
如今只能簡單的瞭解其框架性的概念和流程;socket
Android的核心不是Application而是Activity,至少在咱們開發的時候是這樣的;函數
Activity就是被用來進行與用戶交互和用來與android內部特性交互的組件,學習
在應用程序中用到的全部activity都須要在manifest.xml文件中進行註冊;線程
那麼Activity又是怎樣一種組件,怎麼樣進行顯示交互的,一個activity實例是如何被管理和運行起來的,activity生命週期又是怎麼一回事。代理
Activity管理的核心是AcitivityManagerService,是一個獨立的進程;xml
ActiveThread是每個應用程序所在進程的主線程,循環的消息處理;htm
ActiveThread與AcitivityManagerService的通訊是屬於進程間通訊,使用binder機制;
以啓動一個應用程序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;
使用了Proxy代理模式:ActivityManagerProxy代理ActivityManagerService;
併爲之提供了公共的訪問接口:IActivityManager;
ActivityStack建立並存儲系列建立的Activity實例,將其入棧管理mHistory;
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