詳細(xì)介紹Android配置信息內(nèi)容
有一堆接口標(biāo)準(zhǔn)封裝完整的組件放在哪里,想用的時(shí)候取上幾個(gè)一搭配,整個(gè)程序就構(gòu)建完成了,但前提是要深入理解到底什么是Android配置信息,及他的信息是怎么完成。
在這個(gè)配置文件中,不僅會(huì)描述一些應(yīng)用相關(guān)的信息,很重要的,會(huì)包含一個(gè)應(yīng)用中所有組件的信息。如果你派生Activity或者Service實(shí)現(xiàn)了一個(gè)相關(guān)的類。這只是把它組件化的第一步,你需要把這個(gè)類的相關(guān)信息寫到Android配置信息中,它才會(huì)作為一個(gè)組件被應(yīng)用到,否則只能默默無聞的黯淡度過余生。
擺了一幅圖出來,這次不是偷來的,是敝帚自珍原創(chuàng),所以沒有意外的畫的很丑,但基本還是可以體現(xiàn)出一些意思。在In Others的部分。這里是一般平臺(tái)應(yīng)用之間通信和交互的模型,每個(gè)應(yīng)用都有很強(qiáng)烈的應(yīng)用邊界(往往表現(xiàn)為進(jìn)程邊界...),App 1的還是App 2的,分得很是清楚。
每個(gè)應(yīng)用內(nèi)部,都有自己的邏輯去切分功能組件,這樣的切分通常沒有什么標(biāo)準(zhǔn),率性而為。應(yīng)用間的交互邏輯也比較零散。App 1與App 2交互,往往需要明確知道對方應(yīng)用的具體信息,比如進(jìn)程ID,進(jìn)程名稱之類的,這樣使得應(yīng)用和應(yīng)用之間的聯(lián)系,變得很生硬。
而上層應(yīng)用和系統(tǒng)應(yīng)用的通信,往往有很多特定的模式,這種模式,很可能是無法直接應(yīng)用在普通應(yīng)用之間的,換而言之,系統(tǒng)應(yīng)用是有一定特殊性的。重點(diǎn),在圖的下半部,描述的是Android的應(yīng)用情形。在Android中,應(yīng)用的邊界,在組件這個(gè)層面,是極度模糊,什么進(jìn)程、什么應(yīng)用,都可以不必感知到。
舉個(gè)例子,App 1,實(shí)現(xiàn)了A和B兩個(gè)組件,App 2,實(shí)現(xiàn)了C這個(gè)組件。A和C,都想使用B這個(gè)組件,那么它們的使用方式是完全一致的,都需要通過系統(tǒng)核心的組件識(shí)別和通信機(jī)制。
找到和使用組件B。A,雖說和B是一個(gè)娘胎里蹦出來的,很不好意思,沒有任何特殊的后面和捷徑,還是要跑規(guī)矩的途徑才能用到,一片和諧社會(huì)的景象油然而生。在Android中,所有組件的識(shí)別和消息傳遞邏輯都必須依賴底層核心來進(jìn)行(通信可以沒有底層核心的參與,比如一旦Service找到了,就可以和它產(chǎn)生持久的通信...)。
沒有底層核心的牽線搭橋,任何兩個(gè)組件都無法產(chǎn)生聯(lián)系。比如一個(gè)Activity,跳到另一個(gè)Activity,必須要向底層核心發(fā)起一個(gè)Intent,有底層解析并認(rèn)可后,會(huì)找到另一個(gè)Activity。
把相關(guān)消息和數(shù)據(jù)傳給它。一個(gè)Activity想使用Content Provider中的數(shù)據(jù),必須通過底層核心解析相關(guān)的uri,定位到這個(gè)Content Provider,把參數(shù)傳遞給。然后返回Activity需要的Cursor。這樣的設(shè)計(jì),保證了底層核心對所有組件的絕對掌控權(quán)和認(rèn)知權(quán),使得搭積木似的開發(fā)變成可能。
為了,使得核心系統(tǒng)能夠完整的掌握每個(gè)組件的信息,這就需要Android配置信息文件了。配置文件,就是將組件插到底層核心上的這個(gè)插頭。只有通過這個(gè)插頭插在底層核心的插座上(不要亂想,非十八禁...)。
組件才能夠發(fā)光發(fā)熱,閃耀光芒。組件的Android配置信息在我看來主要包含兩個(gè)方面,一部分是描述如何認(rèn)知。比如,Activity、Service、Broadcast Receiver都會(huì)有名字信息。和希望能夠把握的Intent信息(姑且看成消息好了...)。
Content Provider會(huì)有一個(gè)描述其身份的uri。當(dāng)其他組件通過這樣的名字或者Intent,就可以找到它。另一部分是運(yùn)行相關(guān)的信息。這個(gè)組件,期望怎么來運(yùn)行,放在單獨(dú)的進(jìn)程,還是和調(diào)用者一個(gè)進(jìn)程,還是找相關(guān)的其他組件擠在同一個(gè)進(jìn)程里面。
通過前續(xù)內(nèi)容,也許可以幫助大家對Android組件有個(gè)初略的了解。但這些了解都還停留在靜態(tài)層面,程序是個(gè)動(dòng)態(tài)的概念,關(guān)于各個(gè)組件具體是怎么聯(lián)系在一起的,如何手拉手運(yùn)行起來完成一項(xiàng)功能的,這便是后話了。
【編輯推薦】