前面講解了Android的系統(tǒng)架構(gòu)媒鼓,而在應(yīng)用層,Android的App組件架構(gòu)粱坤,通常就是我們所說的Android四大組件隶糕,指的是Activity,BroadCastRecivicer,ContentProvider,和Service,他們失足成一個Android App的最基本的元素。
1.3.1 ? ?Android四大組件協(xié)同工作
Android中的四大組件的使用方法與使用場景都各不相同,但它們之間也保持著緊密的聯(lián)系站玄,你中有我枚驻,我中有你,緊密相連株旷,秘而不可分再登。
? ? ? ? ? ?Activity作為人機交互的第一界面,負責向用戶展示信息和處理結(jié)果晾剖,锉矢,而這些信息的來源可以通過資源獲取,也可以通過ContentProvider 來獲取其他應(yīng)用的信息齿尽,或是Service從后臺計算沽损、下載、處理的結(jié)果循头,當然也可以通過 BroadCastReceiver 獲取的廣播信息绵估。同時Android系統(tǒng)還提供了一個信使------intent炎疆,作為信息的傳遞的載體。組件于組件之間通過Intent來通訊国裳、傳遞信息形入、交換數(shù)據(jù),正是通過這樣的一種形式缝左,四大組件形成了各自獨立而又緊密相連的關(guān)系亿遂,讓整個Android系統(tǒng)“活” 了起來。
? ? ? ? ?Android四大組件在開發(fā)者的協(xié)調(diào)下渺杉,共同完成這開發(fā)者賦予他們的使命蛇数,他們之間沒有孰優(yōu)孰略,所有的組件存在的道理就是為了讓程序能夠更好的實現(xiàn)開發(fā)者的功能少办。當然苞慢,熟知每個組件的功能、特點英妓、矢门,才能在使用時運籌帷幄睦刃。在這里,大家只需要對四大組件的協(xié)同工作模式有個基本的概念即可,隨著本書的講解眠屎,大家會慢慢掌握這些組件的使用技巧永票。
1.3.2 ? 應(yīng)用上下文對象
? ? ? ? ?在高中的時候昏滴,語文課本上經(jīng)常會出現(xiàn)這樣的一句話--------“請聯(lián)系上下文昼窗,分析這句話在文中的作用”,我們可理解為當前對象在程序中所處的一個環(huán)境敷燎,一個與系統(tǒng)交互的過程暂筝。
? ? ? ? Android系統(tǒng)的上下文對象,即在Context中硬贯,為我們封裝了這樣一個“語境”焕襟。Activity、Service饭豹、Application都是繼承自Context鸵赖。
? ? ? ? Android應(yīng)用程序會在如下所示的幾個時間點創(chuàng)建應(yīng)用上下文Content。
? ? ? ? ? ? ? ?創(chuàng)建Application
? ? ? ? ? ? ? ?創(chuàng)建Activity
? ? ? ? ? ? ? ?創(chuàng)建Service
不難發(fā)現(xiàn)拄衰,創(chuàng)建Context的時機就是創(chuàng)建Context的實現(xiàn)類的時候它褪。當應(yīng)用程序第一次啟動時,Android系統(tǒng)會創(chuàng)建一個Application對象翘悉,同時創(chuàng)建application Context茫打,所有的組件都共同擁有這樣一個Context對象,這個應(yīng)用上下文對象貫穿整個應(yīng)用進程的生命周期,為應(yīng)用全局提供了功能和環(huán)境的支持老赤,而創(chuàng)建Activity和Service組件時饼煞,系統(tǒng)也會給他們提供運行的上下環(huán)境,及創(chuàng)建Activity和Service實例的Context對象诗越。所以跟多讀者在Acticity中獲取Context對象是,可以使用this息堂,而在匿名內(nèi)部內(nèi)中就必須指定XXXactivity.this才可以獲取該Activity的Context對象嚷狞。當然,你也可以通過getApplicationContext()方法來獲取整個App的Context荣堰,但是通過getApplicationContext()是獲得的是整個應(yīng)用的上下文引用床未,這與某個組件的上下文引用,在某些時候還是有區(qū)別的振坚。