1. 程式人生 > >Android Framework架構原理學習之AndroidApp啟動

Android Framework架構原理學習之AndroidApp啟動

最近看到了一份特別好的視訊,由臺灣Android教父講的從程式設計師到架構師的視訊。看了之後,好多之前迷惑的地方都豁然開朗。比如APP到底是什麼,UI執行緒主執行緒都做哪些事。四大元件在哪生成。Android Framework,到底是個什麼東西,它在Android App的開發和執行中做了什麼事。當然關於這些知識的細節,很難完全掌握,而APP開發者,只需要有個基本的認知就可以了。以下是我在學習過程中的一些總結(有可能寫一篇,也有可能寫好幾篇)

首先從Activity講起。對於Java來說,一切都是物件。那麼Activity也應該是一個物件。首先我們知道Activity是一個抽象類,是由Android Framework裡面定義的一個抽象類。不知道大家有沒有疑問,我們開發App的時候從來沒有去new過一個Activity的物件。那麼Activity物件從何而來。我們寫Activity的方式都是myActivity extends Activity。。。,然後重寫onCreate()方法。還有一點必須注意的就是要在Manifest裡面把這個Activity給註冊上。為什麼要這樣做,我們不知道main函式在哪,不知道從哪開始執行,怎樣執行,這也是剛開始寫Android App最令人困惑的地方。

賣夠了關子,直接先說個感性的描述把。其實我們寫的App並不是一個完整的程式。我們寫的只是一個套件組,就是一堆Activity,Service等等的元件。我們把這個套件組給Framework框架,和它們組合在一起才是一個完整的程式。在這裡先說一個概念,也就是EIT模型(由高煥堂老師提出來的概念)。E是Engine發動機,I是Interface介面,T是tire輪胎。也就是發動機通過介面接上輪胎,然後車子才能跑。然後框架提供的就是E&I,一般框架都是提供發動機和介面,讓我們來做輪胎,然後裝上就可以跑起來了。(這裡的I也可以理解為抽象函式,因為抽象函式就相當於介面嘛)抽象類也就是把發動機和介面,放在一個類裡。像Activity,提供了一個介面函式(卡隼函式)onCreate(),我們寫myActivity,就要重寫onCreate(),Activity這個抽象類就是發動機,onCreate()就是介面,myActivity就是輪胎。當框架要Activity執行的時候調onCreate()方法,就帶動了myActivity的執行。我們寫在onCreate()中的程式碼就得到了執行。

Android框架這樣做的好處就是牢牢掌握控制權,要求開發者必須在我給你的介面中裝填程式碼,我框架內容千變萬化你都不用管,你老老實實在我給你的介面填程式碼就行了,整個生命週期都由我框架來掌控。試想,如果不通過這種模式,不是給App開發者提供介面,而是直接的函式呼叫,那框架就要受制於App開發者,這個函式用的人越多,函式改動的成本就越高。框架就被迫不能改變,慢慢也就死了。而通過EIT模型,提供給開發者的只是一個介面,框架對App開發者就是透明的,你只需要在介面中做事就行了,這樣就更規範和靈活。關於什麼時候new Activity的物件是由Framework框架來控制的。Manifest檔案裡把Activity註冊上,是因為Framework框架要new Activity的時候知道去哪找這個子類。而且這個物件有什麼初始值,比如響應什麼樣的intent。這樣App的啟動也就好理解了,點選桌面圖示,由FrameWork框架捕獲這個事件,去找這個圖示對應的App的Manifest裡面找到要啟動的第一個Activity,就是那個在Manifest裡註明是main和luncher的。然後由Framework框架new出這個myActivity物件。自然也就new出了基類Activity物件,然後Framework框架呼叫Activity的onCreate(),實際物件是myActivity,執行的也就是myActivity的onCreate()。這時候App就啟動了。

在整個Android Framework很多地方都是用的這種結構。至於框架裡面具體怎樣執行,以後再慢慢說,現有個感性的認知。下面一篇繼續講Android中的程序相關的。